Les exceptions et erreurs

try, catch

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

catch conditionnel

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;
} 

finally

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

throw

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