ES6 - Gestione degli errori

Esistono tre tipi di errori nella programmazione: errori di sintassi, errori di runtime ed errori logici.

Errori di sintassi

Errori di sintassi, chiamati anche parsing errors, si verificano in fase di compilazione nei linguaggi di programmazione tradizionali e in fase di interpretazione in JavaScript. Quando si verifica un errore di sintassi in JavaScript, viene influenzato solo il codice contenuto nello stesso thread dell'errore di sintassi e il resto del codice in altri thread viene eseguito supponendo che nulla in essi dipenda dal codice contenente l'errore.

Errori di runtime

Errori di runtime, chiamati anche exceptions, si verificano durante l'esecuzione (dopo la compilazione / interpretazione). Le eccezioni influiscono anche sul thread in cui si verificano, consentendo ad altri thread JavaScript di continuare la normale esecuzione.

Errori logici

Gli errori logici possono essere il tipo di errore più difficile da rintracciare. Questi errori non sono il risultato di un errore di sintassi o di runtime. Invece, si verificano quando si commette un errore nella logica che guida lo script e non si ottiene il risultato previsto.

Non è possibile rilevare questi errori, perché dipende dai requisiti aziendali e dal tipo di logica che si desidera inserire nel programma.

JavaScript genera istanze dell'oggetto Error quando si verificano errori di runtime. La tabella seguente elenca i tipi predefiniti dell'oggetto Error.

Suor n Oggetto errore e descrizione
1

EvalError

Crea un'istanza che rappresenta un errore che si verifica riguardo alla funzione globale eval().

2

RangeError

Crea un'istanza che rappresenta un errore che si verifica quando una variabile numerica o un parametro è al di fuori del suo intervallo valido.

3

ReferenceError

Crea un'istanza che rappresenta un errore che si verifica quando si dereferenzia un riferimento non valido.

4

SyntaxError

Crea un'istanza che rappresenta un errore di sintassi che si verifica durante l'analisi del codice.

5

TypeError

Crea un'istanza che rappresenta un errore che si verifica quando una variabile o un parametro non è di un tipo valido.

6

URIError

Crea un'istanza che rappresenta un errore che si verifica quando encodeURI() o decodeURI() vengono passati parametri non validi.

Lanciare eccezioni

Un errore (predefinito o definito dall'utente) può essere generato utilizzando il throw statement. Successivamente queste eccezioni possono essere acquisite e l'utente può intraprendere un'azione appropriata. Di seguito è riportata la sintassi per lo stesso.

Sintassi: generazione di un'eccezione generica

throw new Error([message]) 
OR 
throw([message])

Sintassi: generazione di un'eccezione specifica

throw new Error_name([message])

La gestione delle eccezioni

La gestione delle eccezioni viene eseguita con un file try...catch statement. Quando il programma incontra un'eccezione, il programma terminerà in modo ostile. Per proteggersi da questo errore imprevisto, possiamo racchiudere il nostro codice in un'istruzione try ... catch.

Il blocco try deve essere seguito esattamente da un blocco catch o da un blocco latest (o uno di entrambi). Quando si verifica un'eccezione nel blocco try, l'eccezione viene inserita in e e viene eseguito il blocco catch. Il blocco finalmente opzionale viene eseguito incondizionatamente dopo try / catch

Di seguito è riportata la sintassi per lo stesso.

try {  
   // Code to run  
   [break;]  
} catch ( e ) {  
   // Code to run if an exception occurs
   [break;]  
}[ finally {  
   // Code that is always executed regardless of  
   // an exception occurring  
}]

Esempio

var a = 100; 
var b = 0; 
try { 
   if (b == 0 ) { 
      throw(“Divide by zero error.”); 
   } else { 
      var c = a / b; 
   } 
} 
catch( e ) { 
   console.log("Error: " + e ); 
}

Produzione

Il seguente output viene visualizzato in caso di corretta esecuzione del codice precedente.

Error: Divide by zero error

Note - Nota: puoi sollevare un'eccezione in una funzione e quindi puoi catturare quell'eccezione nella stessa funzione o nella funzione chiamante usando un try...catch bloccare.

Il metodo onerror ()

Il onerroril gestore di eventi è stata la prima funzionalità a facilitare la gestione degli errori in JavaScript. L'evento di errore viene generato sull'oggetto finestra ogni volta che si verifica un'eccezione nella pagina.

Esempio

<html> 
   <head> 
      <script type = "text/javascript"> 
         window.onerror  =  function () {  
            document.write ("An error occurred.");  
         } 
      </script> 
   </head> 

   <body> 
      <p>Click the following to see the result:</p> 
      <form> 
         <input type = "button" value = "Click Me" onclick = "myFunc();" /> 
      </form> 
   </body> 
</html>

Produzione

Il seguente output viene visualizzato in caso di corretta esecuzione del codice precedente.

Il gestore di eventi onerror fornisce tre informazioni per identificare la natura esatta dell'errore:

  • Error message - Lo stesso messaggio che il browser visualizzerebbe per l'errore specificato.

  • URL - Il file in cui si è verificato l'errore.

  • Line number - Il numero di riga nell'URL fornito che ha causato l'errore.

Il seguente esempio mostra come estrarre queste informazioni.

Esempio

<html> 
   <head> 
      <script type = "text/javascript"> 
         window.onerror  =  function (msg, url, line) {  
            document.write ("Message : " + msg );  
            document.write ("url : " + url );  
            document.write ("Line number : " + line );  
         } 
      </script> 
   </head> 

   <body> 
      <p>Click the following to see the result:</p> 
      <form> 
         <input type = "button" value = "Click Me" onclick = "myFunc();" /> 
      </form> 
   </body> 
</html>

Errori personalizzati

JavaScript supporta il concetto di errori personalizzati. L'esempio seguente spiega lo stesso.

Esempio 1: errore personalizzato con messaggio predefinito

function MyError(message) { 
   this.name = 'CustomError'; 
   this.message = message || 'Error raised with default message'; 
} 
try { 
   throw new MyError(); 
} catch (e) {  
   console.log(e.name);      
   console.log(e.message);  // 'Default Message' 
}

Il seguente output viene visualizzato in caso di corretta esecuzione del codice precedente.

CustomError 
Error raised with default message

Esempio 2: errore personalizzato con messaggio di errore definito dall'utente

function MyError(message) { 
   this.name = 'CustomError'; 
   this.message = message || 'Default Error Message';  
} try { 
   throw new MyError('Printing Custom Error message'); 
} 
catch (e) { 
   console.log(e.name);      
   console.log(e.message);  
}

Il seguente output viene visualizzato in caso di corretta esecuzione del codice precedente.

CustomError 
Printing Custom Error message