Erreurs JavaScript

Les erreurs peuvent survenir !

Lors de l'exécution du code JavaScript, différentes erreurs peuvent se produire.

Ces erreurs peuvent être des erreurs de codage commises par le programmeur, des erreurs dues à une mauvaise entrée, ou d'autres imprévus :

  • Erreurs de référence
  • Erreurs de type
  • Erreurs de plage
  • Erreurs URI
  • Erreurs de syntaxe
  • Erreur Eval (dépréciée)
  • Erreurs silencieuses (chapitre suivant)

Comment gérer les erreurs JavaScript

L'instruction try vous permet de définir un bloc de code à tester pour des erreurs pendant son exécution.

L'instruction catch vous permet de définir un bloc de code à exécuter si une erreur se produit dans le bloc try .

Les instructions JavaScript try et catch sont utilisées par paires :

try {
Bloc de code à essayer
} catch( err ) {
Bloc de code pour gérer les erreurs
}

Erreurs de référence

Une ReferenceError se produit si vous utilisez (référencez) une variable qui n'existe pas.

Type d'erreur Exemple Erreur
ReferenceError fname = foo; foo n'est pas défini
ReferenceError let x = y;
let y = 5;
Impossible d'accéder à y avant l'initialisation

Exemples

Vous ne pouvez pas utiliser une variable non existante :

let x = 5;

try {
x = y + 1;
} catch(err) {
let text = err.name;
}
Essayez-le vous-même »

Impossible d'accéder à une variable avant l'initialisation :

try {
let x = y;
let y = 5;
} catch(err) {
let text = err.name;
}
Essayez-le vous-même »

Erreurs de type JavaScript

Une Type Error se produit lorsqu'une valeur est du mauvais type ou qu'une opération est invalide pour ce type.

Erreur Exemple Message d'erreur
TypeError Anna(5); Anna n'est pas une fonction
Type Error let num = 1;
num.toUpperCase();
num.toUpperCase n'est pas une fonction

Exemples

Anna() n'est pas une fonction :

try {
Anna(5);
} catch(err) {
let text = err.name;
}
Essayez-le vous-même »

Vous ne pouvez pas convertir un nombre en majuscules :

let num = 1;
try {
num.toUpperCase();
} catch(err) {
let text = err.name;
}
Essayez-le vous-même »


Erreurs de plage JavaScript

Une RangeError se produit lorsqu'une valeur est en dehors de sa plage valide.

Type d'erreur Exemple Message d'erreur
RangeError new Array(-1); Longueur de tableau invalide
RangeError num.toPrecision(500); L'argument de toPrecision() doit être compris entre 1 et 100

Exemples

Vous ne pouvez pas définir le nombre d'éléments d'un tableau à -1 :

try {
new Array(-1);
} catch(err) {
let text = err.name;
}
Essayez-le vous-même »

Vous ne pouvez pas définir le nombre de chiffres significatifs d'un nombre à 500 :

let num = 1;

try {
num.toPrecision(500); // Un nombre ne peut pas avoir 500 chiffres significatifs
} catch(err) {
let text = err.name;
}
Essayez-le vous-même »

Erreurs URI JavaScript

(Erreurs d'identifiant de ressource uniforme)

Une URIError se produit si vous utilisez des caractères illégaux dans une fonction URI :

Type d'erreur Exemple Message d'erreur
URIError decodeURI("%%%"); URI mal formé

Exemple

try {
decodeURI("%%%"); // Vous ne pouvez pas décoder des signes de pourcentage en URI
} catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
Essayez-le vous-même »

Erreurs de syntaxe JavaScript

Une Syntax Error se produit lorsque le code enfreint les règles de grammaire de JavaScript.

Erreur Exemple Erreur
SyntaxError fname = "John); Jeton ) invalide ou inattendu
SyntaxError Math.round(4.6; ) manquant après la liste des arguments

Exemple

Dans cet exemple, nous avons fait l'erreur de ne pas fermer la chaîne :

// Cette ligne ne peut pas être analysée par JavaScript
let fName = "John);

// L'exécution s'arrête ici
Essayez-le vous-même »

L'instruction ci-dessus générera l'erreur : Jeton invalide ou inattendu

L'exécution du programme s'arrêtera !

Les erreurs de syntaxe ne sont pas attrapables

  • Les erreurs de syntaxe ne peuvent pas être interceptées par try...catch
  • Les erreurs de syntaxe se produisent avant l'exécution

Exemple

Le code ci-dessous devrait produire une erreur, mais il ne le fait pas :

try {
let x = Math.round(4.6;)
} catch(err) {
let text = err.name + " " + err.description;
}
Essayez-le vous-même »

Problème de syntaxe

Math.round(4.6;)

La ligne ci-dessus est un JavaScript syntaxiquement invalide. Il y a un point-virgule supplémentaire à l'intérieur des parenthèses. La syntaxe correcte devrait être :

Math.round(4.6);

Pourquoi

Le point est de savoir comment le navigateur gère les erreurs de syntaxe :

Le moteur JavaScript lance une SyntaxError avant d'exécuter le script.

Les erreurs de syntaxe sont détectées avant que le bloc try...catch ne s'exécute.

Cela signifie que le bloc try ne commence jamais. Le script échoue simplement à s'exécuter (pas de let text = update).

Remarque

La console du navigateur (F12 → onglet Console) afficherait quelque chose comme :

Erreur de syntaxe non interceptée : ) manquant après la liste des arguments.


Erreur Eval JavaScript

Une EvalError indique une erreur dans la fonction eval().

Les versions plus récentes de JavaScript ne lancent pas d'EvalError.

Utilisez SyntaxError à la place.