Gli errori di programmazione sono inevitabili. Prima o poi, la tua applicazione subirà un comportamento imprevisto. Come qualsiasi altro linguaggio di programmazione, JavaScript genera errori quando qualcosa va storto nel codice.
Gli errori interrompono il normale flusso di un'applicazione. Ma aiutano anche a proteggere la tua applicazione da comportamenti imprevedibili. Saper gestire correttamente gli errori è fondamentale.
Perché la gestione degli errori è importante?
La gestione degli errori contribuisce a una migliore esperienza utente. Puoi sostituire gli errori predefiniti e talvolta dettagliati di JavaScript con messaggi di errore più leggibili dall'uomo. Puoi gestire con grazia le cause di alcuni errori e mantenere il tuo programma in esecuzione anziché chiuderlo.
Anche la gestione degli errori è utile durante lo sviluppo. Puoi rilevare un errore di runtime e fare qualcosa di utile con esso, ad esempio registrandolo sulla console del browser. Questo è più grazioso dell'errore che causa un arresto anomalo e non sa dove o perché si è verificato l'errore.
Struttura degli errori incorporati in JavaScript
Gli errori di JavaScript sono oggetti con tre proprietà:
- nome: Questo è il nome dell'errore. Ad esempio, un nome di variabile mancante genererà un errore chiamato SyntaxError.
- Messaggio: Questo è il corpo del messaggio e spiega l'errore testualmente.
- causa: puoi utilizzare questa proprietà con errori personalizzati per tenere traccia dello stack di chiamate.
Tipi comuni di errore in JavaScript
Ecco alcuni errori comuni trovati in JavaScript.
Errore di sintassi
Errori di sintassi possono verificarsi quando JavaScript tenta di interpretare il codice. Verrà visualizzato un errore se il codice non è conforme alla sintassi corretta. Alcuni errori comuni che possono generare errori di sintassi sono:
- Nomi variabili mancanti.
- Manca "}" dopo una funzione.
- Manca ")" dopo una condizione.
Errore di riferimento
Gli errori di riferimento si verificano quando un programma tenta di farlo fare riferimento a una variabile che non è disponibile o fuori portata.
Digitare Errore
JavaScript può generare un errore di tipo quando non può eseguire un'operazione perché il tipo che si aspetta è diverso da quello che riceve.
Errore URI
Questo errore si verifica se si utilizza una funzione di gestione dell'URI globale, come decodeURIComponent(), in modo errato. Di conseguenza, la codifica o la decodifica non riesce.
AggregateError
Questo errore viene utilizzato per rappresentare più errori racchiusi in uno. Usalo quando vuoi lanciare molti errori contemporaneamente. Ad esempio, Promise.any() può generare un AggregateError() quando tutte le promesse passate vengono rifiutate.
Errore interno
Viene generato un InternalError quando si verifica un errore all'interno del motore JavaScript.
Errore di intervallo
Alcune funzioni determinano l'intervallo di valori che puoi passare come argomenti. Questo errore si verifica quando si tenta di passare un valore che non è incluso in quell'intervallo.
Gestione degli errori con Try... Blocco di cattura
JavaScript fornisce funzionalità di gestione delle eccezioni integrate con prova... prendi... finalmente bloccare. Ti consente anche di sollevare i tuoi errori usando il gettare operatore.
È possibile utilizzare un blocco try...catch per gestire gli errori che si verificano durante il runtime. Scrivi codice valido che prevedi di eseguire correttamente nel blocco try. Nel blocco catch è possibile scrivere codice di gestione degli errori.
Tentativo {
// Codice Javascript valido
} presa (errore) {
// Gestire l'errore
} finalmente {
// Eseguito anche quando si verifica un errore
}
Il blocco catch viene ignorato se il codice nel blocco try non genera errori. Se genera un errore, l'esecuzione salta al blocco catch. Il codice nel blocco finally viene eseguito indipendentemente dal verificarsi di un errore. Questo blocco non è obbligatorio, quindi omettilo se non ne hai bisogno.
Il codice che includi nel blocco try deve essere valido. In caso contrario, JavaScript genererà un errore di analisi.
Vediamo un esempio pratico:
Tentativo {
consolle.log (testo)
} presa (errore) {
consolle.tronco d'albero(errore.Messaggio)
} finalmente {
console.log("Verrà eseguito a prescindere")
}
Questo programma tenta di registrare il valore della variabile di testo. Poiché quella variabile non è definita, il programma genererà un errore. Questo errore viene stampato sulla console nel blocco catch. Il blocco finally viene quindi eseguito e stampa un messaggio proprio.
Errore di riferimento: il testo non è definito
Verrà eseguito a prescindere
Nelle situazioni in cui è necessario sollevare il proprio errore, utilizzare il gettare operatore.
Considera questo esempio che genera un errore se i dati sono falsi:
cost dati = getData()
Tentativo {
se (! dati) {
gettare "Nessun dato"
}
consolle.log (dati)
// Continua
} presa(errore) {
consolle.log (errore) // "Nessun dato"
}
In questo esempio, il programma chiama la funzione getData() e ne assegna il risultato alla variabile di dati. Nel blocco try, il blocco genera un errore personalizzato se i dati sono vuoti. Il blocco catch rileva l'errore e lo registra sulla console.
Gli errori di lancio sono molto utili durante lo sviluppo. Puoi utilizzare il messaggio di errore personalizzato per capire perché la tua applicazione non funziona come previsto.
Come dimostra questo esempio, puoi usare una stringa per l'oggetto di errore. Puoi effettivamente lanciare qualsiasi espressione JavaScript come errore. Tuttavia, per motivi di coerenza con gli errori incorporati, utilizzare un oggetto JavaScript contenente un nome e un messaggio.
gettare {
nome: "Nome errore",
Messaggio: "Messaggio di errore"
}
Puoi anche utilizzare i costruttori integrati di JavaScript quando vengono generati errori. Questi costruttori includono Error, SyntaxError e ReferenceError, tra gli altri.
Per generare un errore utilizzando il costruttore Error, utilizzare questo codice:
gettarenuovoErrore("Nessun dato")
Ora puoi fare riferimento al nome e al messaggio.
consolle.log (nome.errore) // Errore
consolle.log (messaggio.errore) // Nessun dato
Estendere l'oggetto di errore JavaScript
Una classe di errore personalizzata è utile quando si gestiscono errori che non corrispondono agli oggetti già forniti da JavaScript. Ad esempio, potresti voler isolare un errore di convalida dei dati come un tipo specifico chiamato ValidationError.
Puoi usare un Classe JavaScript ES2015 per creare una classe di errore personalizzata.
classeErrore di convalidasi estendeErrore{
costruttore(Messaggio) {
super(Messaggio);
questo.nome = "Errore di convalida";
}
}
Genera un errore utilizzando la classe ValidationError in questo modo:
gettarenuovo ValidationError("Il tuo messaggio di errore")
L'errore generato sarà un oggetto con il nome e i valori del messaggio.
{
nome: "Errore di convalida",
Messaggio: "Il tuo messaggio di errore"
}
Gli errori sono lì per aiutare
La gestione degli errori è una parte fondamentale della programmazione, indipendentemente dal linguaggio che stai utilizzando. JavaScript ha un ottimo supporto per la raccolta e la cattura di errori nello stile delle eccezioni. Ha anche diversi tipi di errore integrati che puoi gestire e utilizzare per i tuoi casi.
Alcuni errori come gli errori di sintassi possono passare inosservati quando si scrive JavaScript in "modalità sciatta". L'uso della modalità rigorosa consente a JavaScript di rilevare errori che altrimenti avrebbe ignorato.