Gestion des erreurs en JavaScript

Introduction à try/catch

Le bloc try...catch...finally est une structure essentielle pour la gestion des erreurs en JavaScript. Il permet de définir un bloc de code qui sera exécuté, un autre qui interviendra si le premier bloque rencontre une erreur, ainsi qu'un éventuel troisième bloc qui s'exécute quoi qu'il arrive. Bien que les blocs catch et finally soient facultatifs, il est nécessaire que chaque bloc try soit suivi de l'un ou l'autre.

Syntaxe de try/catch

Voici une représentation de la syntaxe standard :

try {  // Instructions à exécuter jusqu'à ce qu'une exception soit lancée} catch (err) {  // Instructions à exécuter si une exception est lancée dans le bloc try} finally {  // Instructions qui s'exécutent toujours, peu importe la situation}

L'objet d'erreur

Dans le bloc ci-dessus, err est une variable optionnelle recevant l'objet d'erreur associé au bloc catch. Cet objet fournit des détails sur l'exception survenue, accessible uniquement dans le contexte du bloc catch. Il dispose de deux propriétés importantes :

  • name : Définit ou retourne le type d'erreur.
  • message : Définit ou retourne un message d'erreur, décrivant le problème rencontré.

Les types d'erreur qui peuvent être retournés incluent : - RangeError : Erreur liée à un valeur "hors de portée". - ReferenceError : Erreur liée à une référence illégale. - SyntaxError : Erreur de syntaxe. - TypeError : Erreur de type. - URIError : Erreur dans l'encodage URI.

Utilisation de l'instruction throw

Il est aussi possible de lancer des exceptions de manière intentionnelle à l'aide de l'instruction throw. Vous pouvez créer une exception personnalisée constituée d'une chaîne de caractères, d'un nombre, d'un booléen ou d'un objet, qui sera ensuite capturée par le bloc catch le plus proche. C'est pratique pour valider des entrées, comme dans l'exemple ci-dessous :

var input = 25;
try {  
    if (input < 10) {
        throw 'trop petit !';  
    } else if (input > 20) {
        throw 'trop grand !';  
    } else {
        console.log('L’entrée était ' + input);
    }
} catch (e) {  
    console.log('L’entrée était ' + e);
}
// Sortie : L’entrée était trop grand !

De plus, throw peut être utilisé pour relancer un objet d'erreur déjà capturé. Cela s'avère utile lorsque seuls certains types d'erreurs doivent être gérées. Voici comment procéder :

try {  
    // Plusieurs instructions 
} catch (e) {  
    if (e instanceof RangeError) {  
        // Gestion de l’exception RangeError  
    } else {  
        throw e;  
    }
}