Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Error
Baseline Widely available *
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.
Les objetsError sont déclenchés lorsque des erreurs d'exécution surviennent. L'objetError peut aussi être utilisé comme objet de base pour des exceptions spécifiques. Voir ci-dessous pour les types d'erreur natifs standards.
Dans cet article
Description
Les erreurs d'exécution ont pour résultat la création et le déclenchement d'objetsError.
Types d'erreur
En plus du constructeurError générique, il existe d'autres constructeurs d'erreur natifs en JavaScript. Pour les exceptions côté client, voirContrôle du flux d'instructions et gestion des erreurs.
EvalErrorCrée une instance représentant une erreur se produisant en relation avec la fonction globale
eval().RangeErrorCrée une instance représentant une erreur se produisant quand une variable numérique ou un paramètre est en dehors de sa plage de validité.
ReferenceErrorCrée une instance représentant une erreur se produisant lors du déréférencement d'une référence invalide.
SyntaxErrorCrée une instance représentant une erreur de syntaxe.
TypeErrorCrée une instance représentant une erreur se produisant quand une variable ou un paramètre n'est pas d'un type valide.
URIErrorCrée une instance représentant une erreur se produisant quand des paramètres invalides sont passés à
encodeURI()ou àdecodeURI().AggregateErrorCrée une instance représentant différentes erreurs agrégées en une seule lorsque plusieurs erreurs sont rapportées par une opération, par exemple avec
Promise.any().InternalErrorNon standardCrée une instance représentant une erreur se produisant quand une erreur interne dans le moteur JavaScript est déclenchée. Par exemple, « too much recursion ».
Constructeur
Error()Crée un nouvel objet
Error.
Méthodes statiques methods
Error.captureStackTrace()Une fonction non-standard implémentée par le moteur V8 qui crée la propriété
stackd'une instance deError.
Propriétés des instances
Error.prototype.messageLe message de l'erreur.
Error.prototype.nameLe nom de l'erreur.
Error.prototype.descriptionNon standardUne propriété non-standard, implémentée par Microsoft, qui décrit l'erreur. Analogue à
message.Error.prototype.numberNon standardUne propriété non-standard, implémentée par Microsoft, qui fournit un nombre pour chaque erreur.
Error.prototype.fileNameNon standardUne propriété non-standard, implémentée par Mozilla, qui indique le chemin du fichier à l'origine de l'erreur.
Error.prototype.lineNumberNon standardUne propriété non-standard, implémentée par Mozilla, qui indique le numéro de la ligne du fichier à l'origine de l'erreur.
Error.prototype.columnNumberNon standardUne propriété non-standard, implémentée par Mozilla, qui indique le numéro de la colonne de la ligne du fichier à l'origine de l'erreur.
Error.prototype.stackNon standardUne propriété non-standard, implémentée par Mozilla, pour fournir une trace de la pile d'appels.
Méthodes des instances
Error.prototype.toString()Renvoie une chaîne de caractères qui représente l'objet courant. Surcharge la méthode
Object.prototype.toString().
Exemples
>Déclenchement d'une erreur générique
On crée habituellement un objetError dans l'intention de le déclencher en utilisant le mot-cléthrow. L'erreur peut ensuite être interceptée et gérée en utilisant la constructiontry…catch :
try { throw new Error("Oups !");} catch (e) { console.log(e.name + " : " + e.message);}Gestion d'une erreur spécifique
Il est possible de ne gérer que certains types d'erreur particuliers en testant le type de l'erreur via la propriétéconstructor ou grâce au mot-cléinstanceof :
try { toto.truc();} catch (e) { if (e instanceof EvalError) { console.error(e.name + " : " + e.message); } else if (e instanceof RangeError) { console.error(e.name + " : " + e.message); } // ... etc else { // Si aucun cas ne correspond, on laisse l'erreur // non-gérée throw e; }}Distinguer des erreurs semblables
Il arrive parfois que des erreurs semblables (type et message identiques) nécessitent des traitements différents.
Si vous ne maîtrisez pas l'origine des erreurs, vous pouvez les intercepter et renvoyer de nouveaux objetsError avec des messages plus spécifiques.
L'erreur d'origine peut être passée au constructeurError avec le paramètreoption (qui correspond à la propriétécause), cela permettra que l'erreur d'origine et la pile d'appels seront disponibles pour les blocstry/catch de plus haut niveau.
Dans l'exemple qui suit, on illustre ceci pour deux méthodes qui échoueraient avec des erreurs similaires (echecUneFacon() etechecAutreFacon()):
function faireTruc() { try { echecUneFacon(); } catch (err) { throw new Error("Echoue d'une certaine façon", { cause: err }); } try { echecAutreFacon(); } catch (err) { throw new Error("Echoue d'une autre façon", { cause: err }); }}try { faireTruc();} catch (err) { switch (err.message) { case "Echoue d'une certaine façon": gererUneFacon(err.cause); break; case "Echoue d'une autre façon": gererUneAutreFacon(err.cause); break; }}Il est aussi possible d'utiliser la propriétécause destypes d'erreur personnalisés, si celle-ci est fournie via le paramètreoptions du constructeur de la sous-classe lors de l'appel àsuper() :
class MonErreur extends Error { constructor(/* des arguments */) { // Il faut passer les paramètres `message` et `options` // pour que la propriété "cause" soit initialisée. super(message, options); }}Types d'erreur personnalisés
Il est possible de définir ses propres types d'erreur dérivés deError et d'utiliser alorsthrow new MonErreur() etinstanceof MonErreur pour vérifier le type d'erreur lors du traitement. Cela permet d'avoir un code plus concis et cohérent pour le traitement des erreurs.
Voircette question (en anglais) sur StackOverflow pour une discussion détaillée.
En utilisant les classes ES2015
Attention :Les versions de Babel antérieures à la version 7 peuvent gérer les méthodes de classes des erreurs personnalisées uniquement lorsqu'elles sont déclarées avecObject.defineProperty(). Dans le cas contraire, la transpilation du code qui suit ne sera pas gérée correctement sansconfiguration supplémentaire.
Note :Certains navigateurs incluent le constructeurCustomError dans la pile d'appel lorsque les classes ES2015 sont utilisées.
class ErreurSpecifique extends Error { constructor(toto = "truc", ...params) { // On passe les arguments restants (y compris ceux // de l'éditeur tiers) au constructeur parent super(...params); // On garde la pile d'appels de l'erreur // Uniquement disponible pour V8 if (Error.captureStackTrace) { Error.captureStackTrace(this, ErreurSpecifique); } this.name = "ErreurSpecifique"; // Les informations de débogage spécifiques this.toto = toto; this.date = new Date(); }}try { throw new ErreurSpecifique("truc", "trucMessage");} catch (e) { console.error(e.name); // ErreurSpecifique console.error(e.toto); // truc console.error(e.message); // trucMessage console.error(e.stack); // stacktrace}En utilisant des objets ES5
Attention :Tous les navigateurs incluent le constructeur du type spécifique dans la pile d'appel lorsque la déclaration prototypale est utilisée.
function ErreurSpecifique(toto, message, fileName, lineNumber) { var instance = new Error(message, fileName, lineNumber); instance.name = "ErreurSpecifique"; instance.toto = toto; Object.setPrototypeOf(instance, Object.getPrototypeOf(this)); if (Error.captureStackTrace) { Error.captureStackTrace(instance, ErreurSpecifique); } return instance;}ErreurSpecifique.prototype = Object.create(Error.prototype, { constructor: { value: Error, enumerable: false, writable: true, configurable: true, },});if (Object.setPrototypeOf) { Object.setPrototypeOf(ErreurSpecifique, Error);} else { ErreurSpecifique.__proto__ = Error;}try { throw new ErreurSpecifique("truc", "trucMessage");} catch (e) { console.error(e.name); // ErreurSpecifique console.error(e.toto); // truc console.error(e.message); // trucMessage}Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-error-objects> |
Compatibilité des navigateurs
Voir aussi
- Une prothèse d'émulation pour
Errorqui inclut la prise en charge decause, disponible aveccore-js throwtry…catch