156 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			156 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Error Handling and Try Catch Throw | |||
|  | localeTitle: Обработка ошибок и попытка бросить вызов | |||
|  | --- | |||
|  | ## Обработка ошибок и попытка бросить вызов
 | |||
|  | 
 | |||
|  | `try...catch..finally` оператор маркирует блок операторов, чтобы попробовать, и указывает ответ, если должно быть выбрано исключение. Оператор `try` содержит одно или несколько операторов и по крайней мере одно предложение `catch` или предложение `finally` или оба. | |||
|  | 
 | |||
|  | #### `try...catch` :
 | |||
|  | 
 | |||
|  | ```javascript | |||
|  | try {  | |||
|  |    throw new Error('my error');  | |||
|  |  }  | |||
|  |  catch (e) {  | |||
|  |   console.error(e.message);  | |||
|  |  }  | |||
|  |   | |||
|  |  // Output:  | |||
|  |  // my error  | |||
|  | ``` | |||
|  | 
 | |||
|  | #### `try...finally` :
 | |||
|  | 
 | |||
|  | ```javascript | |||
|  | try {  | |||
|  |    throw new Error('my error');  | |||
|  |  }  | |||
|  |  finally {  | |||
|  |   console.error('finally');  | |||
|  |  }  | |||
|  |   | |||
|  |  // Output:  | |||
|  |  // finally  | |||
|  | ``` | |||
|  | 
 | |||
|  | _Примечание:_ когда вы не `catch` ошибку, она фактически не «поймана», даже если блок `finally` выполнен. Это означает, что ошибка будет продолжаться до верхнего блока `try` (или основного блока). | |||
|  | 
 | |||
|  | #### `try...catch...finally` :
 | |||
|  | 
 | |||
|  | ```javascript | |||
|  | try {  | |||
|  |    throw new Error('my error');  | |||
|  |  }  | |||
|  |  catch (e) {  | |||
|  |   console.error(e.message);  | |||
|  |  }  | |||
|  |  finally {  | |||
|  |   console.error('finally');  | |||
|  |  }  | |||
|  |   | |||
|  |  // Output:  | |||
|  |  // my error  | |||
|  |  // finally  | |||
|  | ``` | |||
|  | 
 | |||
|  | Типичное использование: | |||
|  | 
 | |||
|  | ```javascript | |||
|  | try {  | |||
|  |    openFile(file);  | |||
|  |    readFile(file)  | |||
|  |  }  | |||
|  |  catch (e) {  | |||
|  |   console.error(e.message);  | |||
|  |  }  | |||
|  |  finally {  | |||
|  |   closeFile(file);  | |||
|  |  }  | |||
|  | ``` | |||
|  | 
 | |||
|  | #### Вложенная `try...catch` :
 | |||
|  | 
 | |||
|  | Вы также можете: | |||
|  | 
 | |||
|  | *   Зафиксируйте оператор `try-catch` внутри блока `try` . | |||
|  | *   Выбросьте ошибку вверх. | |||
|  | 
 | |||
|  | ```javascript | |||
|  | try {  | |||
|  |   try {  | |||
|  |     throw new Error('my error');  | |||
|  |   }  | |||
|  |   catch (e) {  | |||
|  |     console.error('inner', e.message);  | |||
|  |     throw e;  | |||
|  |   }  | |||
|  |   finally {  | |||
|  |     console.log('finally');  | |||
|  |   }  | |||
|  |  }  | |||
|  |  catch (e) {  | |||
|  |   console.error('outer', e.message);  | |||
|  |  }  | |||
|  |   | |||
|  |  // Output:  | |||
|  |  // inner my error  | |||
|  |  // finally  | |||
|  |  // outer my error  | |||
|  | ``` | |||
|  | 
 | |||
|  | #### Типы ошибок
 | |||
|  | 
 | |||
|  | ##### Исходная ошибка
 | |||
|  | 
 | |||
|  | ```javascript | |||
|  | var x;  | |||
|  |  try {  | |||
|  |   x = y + 1;   // y cannot be referenced (used)  | |||
|  |  }  | |||
|  |  catch(err) {  | |||
|  |   console.log(err.name, err.message);  | |||
|  |  }  | |||
|  |  // ReferenceError y is not defined  | |||
|  | ``` | |||
|  | 
 | |||
|  | ##### Ошибка синтаксиса
 | |||
|  | 
 | |||
|  | ```javascript | |||
|  | try {  | |||
|  |     eval("alert('Hello)");   // Missing ' will produce an error  | |||
|  |  }  | |||
|  |  catch(err) {  | |||
|  |     console.log(err.name,err.message);  | |||
|  |  }  | |||
|  |  // SyntaxError Invalid or unexpected token  | |||
|  | ``` | |||
|  | 
 | |||
|  | ##### Ошибка типа
 | |||
|  | 
 | |||
|  | ```javascript | |||
|  | var num = 1;  | |||
|  |  try {  | |||
|  |     num.toUpperCase();   // You cannot convert a number to upper case  | |||
|  |  }  | |||
|  |  catch(err) {  | |||
|  |     console.log(err.name, err.message);  | |||
|  |  }  | |||
|  |  // TypeError num.toUpperCase is not a function  | |||
|  | ``` | |||
|  | 
 | |||
|  | ##### Ошибка URI
 | |||
|  | 
 | |||
|  | ```javascript | |||
|  | try {  | |||
|  |     decodeURI("%%%");   // You cannot URI decode these percent signs  | |||
|  |  }  | |||
|  |  catch(err) {  | |||
|  |     console.log(err.name, err.message);  | |||
|  |  }  | |||
|  |  // URIError URI malformed  | |||
|  | ``` | |||
|  | 
 | |||
|  | #### Дополнительная информация:
 | |||
|  | 
 | |||
|  | [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try…catch) [W3S](https://www.w3schools.com/js/js_errors.asp) |