Quand une erreur se produit, JavaScript s’arrête et affiche un message d’erreur. Plutôt que d’arrêter entièrement le processus, il est possible de limiter l’erreur à un bloc grâce à l’instruction try... catch
.
try
execute un bloc de code qui peut éventuellement lancer une erreur.
catch
permet de récupérer l’erreur qui a été déclenchée dans le try
.
L’erreur empêchera l’execution du reste du bloc try
et non le reste du script situé après.
var b = a; // lève une erreur ReferenceError et s'arrête
console.log(b);
try {
var b = a;
} catch(e) {
console.error(e); // affiche l'erreur dans la console
}
console.log(b); // undefined
Il est possible d’utiliser des catch conditionnels, par exemple pour cibler un type d’erreur donné.
try {
...
throwSpecificError();
...
}
catch (SpecificError e) {
specificHandler(e);
}
catch (UnspecificError e) {
unspecificHandler(e);
}
catch (e) {
// don't know what to do
throw e;
}
Il est également possible d’ajouter un bloc finally
, qui s’executera que le try
ait levé une erreur ou non.
try {
var a = b;
console.log("TRY");
} catch (e) {
console.error("CATCH");
} finally {
console.log("FINALLY");
}
console.log("After");
// Affiche CATCH, FINALLY, After
try {
var a = "ok";
console.log("TRY");
} catch (e) {
console.error("CATCH");
} finally {
console.log("FINALLY");
}
console.log("After");
// Affiche TRY, FINALLY, After
On peut mettre une instruction finally
sans catch
.
En cas d’erreur, le bloc finally sera exécuté mais le reste du script (situé après) ne sera pas exécuté.
try {
var a = b;
console.log("TRY");
} finally {
console.log("FINALLY");
}
console.log("After");
// Affiche FINALLY puis s'arrête
Les objets Error
permettent de créer des erreurs.
Une fois crée, l’objet peut être lancé grâce au mot-clé throw
.
try {
throw new Error("Ouups !");
console.log("Try");
} catch (e) {
console.log(e.name + ": " + e.message);
}
console.log("After");
// Affiche "Error: Ouups !" et "After"
Il existe différents types d’erreurs standards, qui héritent de Error
.
Elles sont utilisées par le moteur JavaScript pour lever des erreurs:
EvalError | Erreur dans la fonction eval() |
---|---|
IntervalError | Erreur interne dans le moteur JavaScript, ex "too much recursion" |
RangeError | Variable numérique ou paramètre en dehors de sa plage de validité |
ReferenceError | Référence invalide |
SyntaxError | Erreur de syntaxe dans eval() |
TypeError | Type invalide |
URIError | Erreur dans encodeURI() ou decodeURI() |
Techniquement, un throw
peut lancer tout type de message, pas uniquement des objet Erreur
mais aussi des chaînes de caractères ou des nombres — mais c’est moins courant.
Référence des erreurs JavaScript
Créer des types d’erreur personnalisées