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;
} Impossible d'accéder à une variable avant l'initialisation :
try {
let x = y;
let y = 5;
} catch(err) {
let text = err.name;
} 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;
} Vous ne pouvez pas convertir un nombre en majuscules :
let num = 1;
try {
num.toUpperCase();
} catch(err) {
let text = err.name;
} 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;
} 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;
} 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;
} 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 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;
} 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.