152 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			152 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Error Handling and Try Catch Throw | ||
|  | --- | ||
|  | ## Error Handling and Try Catch Throw
 | ||
|  | 
 | ||
|  | The `try...catch..finally` statement marks a block of statements to try, and specifies a response, should an exception be thrown. The `try` statement contains one or more statements, and at least one `catch` clause or a `finally` clause, or both. | ||
|  | 
 | ||
|  | 
 | ||
|  | #### `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 | ||
|  | ``` | ||
|  | *Note:* when you don't `catch` the error, it is in fact not 'catched', even though the `finally` block is executed. That means that the error will continue to the upper `try` block (or main block). | ||
|  | 
 | ||
|  | #### `try...catch...finally`:
 | ||
|  | ```javascript | ||
|  | try { | ||
|  |    throw new Error('my error'); | ||
|  | } | ||
|  | catch (e) { | ||
|  |   console.error(e.message); | ||
|  | } | ||
|  | finally { | ||
|  |   console.error('finally'); | ||
|  | } | ||
|  | 
 | ||
|  | // Output: | ||
|  | // my error | ||
|  | // finally | ||
|  | ``` | ||
|  | 
 | ||
|  | Typical usage: | ||
|  | ```javascript | ||
|  | try { | ||
|  |    openFile(file); | ||
|  |    readFile(file) | ||
|  | } | ||
|  | catch (e) { | ||
|  |   console.error(e.message); | ||
|  | } | ||
|  | finally { | ||
|  |   closeFile(file); | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### Nested `try...catch`:
 | ||
|  | You can also: | ||
|  | - Nest a `try-catch` statement inside a `try` block. | ||
|  | - Throw the error upwards. | ||
|  | ```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 | ||
|  | ``` | ||
|  | #### Types of Error
 | ||
|  | 
 | ||
|  | ##### Reference 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 | ||
|  | 
 | ||
|  | ``` | ||
|  | 
 | ||
|  | ##### Syntax Error
 | ||
|  | 
 | ||
|  | ```javascript | ||
|  | try { | ||
|  |     eval("alert('Hello)");   // Missing ' will produce an error | ||
|  | } | ||
|  | catch(err) { | ||
|  |     console.log(err.name,err.message); | ||
|  | } | ||
|  | // SyntaxError Invalid or unexpected token | ||
|  | ``` | ||
|  | 
 | ||
|  | ##### Type Error
 | ||
|  | 
 | ||
|  | ```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 Error
 | ||
|  | 
 | ||
|  | ```javascript | ||
|  | try { | ||
|  |     decodeURI("%%%");   // You cannot URI decode these percent signs | ||
|  | } | ||
|  | catch(err) { | ||
|  |     console.log(err.name, err.message); | ||
|  | } | ||
|  | // URIError URI malformed | ||
|  | ``` | ||
|  | 
 | ||
|  | 
 | ||
|  | #### More Information:
 | ||
|  | 
 | ||
|  | <a href='https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch' target='_blank' rel='nofollow'>MDN</a> | ||
|  | <a href='https://www.w3schools.com/js/js_errors.asp' target='_blank' rel='nofollow'>W3S</a> |