156 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Error Handling and Try Catch Throw
 | |
| localeTitle: Manejo de errores y prueba de lanzamiento de captura
 | |
| ---
 | |
| ## Manejo de errores y prueba de lanzamiento de captura
 | |
| 
 | |
| La sentencia `try...catch..finally` marca un bloque de sentencias para intentar, y especifica una respuesta, en caso de que se lance una excepción. La declaración de `try` contiene una o más declaraciones, y al menos una cláusula `catch` o una cláusula `finally` , o ambas.
 | |
| 
 | |
| #### `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 
 | |
| ```
 | |
| 
 | |
| _Nota:_ cuando no se `catch` el error, en realidad no está "atrapado", aunque se ejecute el bloque `finally` . Eso significa que el error continuará hasta el bloque de `try` superior (o bloque principal).
 | |
| 
 | |
| #### `try...catch...finally`
 | |
| 
 | |
| ```javascript
 | |
| try { 
 | |
|    throw new Error('my error'); 
 | |
|  } 
 | |
|  catch (e) { 
 | |
|   console.error(e.message); 
 | |
|  } 
 | |
|  finally { 
 | |
|   console.error('finally'); 
 | |
|  } 
 | |
|  
 | |
|  // Output: 
 | |
|  // my error 
 | |
|  // finally 
 | |
| ```
 | |
| 
 | |
| Uso típico:
 | |
| 
 | |
| ```javascript
 | |
| try { 
 | |
|    openFile(file); 
 | |
|    readFile(file) 
 | |
|  } 
 | |
|  catch (e) { 
 | |
|   console.error(e.message); 
 | |
|  } 
 | |
|  finally { 
 | |
|   closeFile(file); 
 | |
|  } 
 | |
| ```
 | |
| 
 | |
| #### Prueba anidada `try...catch`
 | |
| 
 | |
| Tú también puedes:
 | |
| 
 | |
| *   Anida una declaración `try-catch` dentro de un bloque `try` .
 | |
| *   Lanzar el error hacia arriba.
 | |
| 
 | |
| ```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 
 | |
| ```
 | |
| 
 | |
| #### Tipos de error
 | |
| 
 | |
| ##### Error de referencia
 | |
| 
 | |
| ```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 
 | |
| ```
 | |
| 
 | |
| ##### Error de sintaxis
 | |
| 
 | |
| ```javascript
 | |
| try { 
 | |
|     eval("alert('Hello)");   // Missing ' will produce an error 
 | |
|  } 
 | |
|  catch(err) { 
 | |
|     console.log(err.name,err.message); 
 | |
|  } 
 | |
|  // SyntaxError Invalid or unexpected token 
 | |
| ```
 | |
| 
 | |
| ##### Error de tecleado
 | |
| 
 | |
| ```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 
 | |
| ```
 | |
| 
 | |
| ##### Error de URI
 | |
| 
 | |
| ```javascript
 | |
| try { 
 | |
|     decodeURI("%%%");   // You cannot URI decode these percent signs 
 | |
|  } 
 | |
|  catch(err) { 
 | |
|     console.log(err.name, err.message); 
 | |
|  } 
 | |
|  // URIError URI malformed 
 | |
| ```
 | |
| 
 | |
| #### Más información:
 | |
| 
 | |
| [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try…catch) [W3S](https://www.w3schools.com/js/js_errors.asp) |