--- title: Error slug: Web/JavaScript/Reference/Global_Objects/Error tags: - Error - JavaScript - Reference translation_of: Web/JavaScript/Reference/Global_Objects/Error original_slug: Web/JavaScript/Reference/Objets_globaux/Error ---
Le constructeur Error
crée un objet d'erreur. Des instances d'objets Error
sont déclenchées lorsque des erreurs d'exécution surviennent. L'objet Error
peut aussi être utilisé comme objet de base pour des exceptions définies par l'utilisateur. Voir ci-dessous pour les types d'erreur natifs standard.
new Error([message[, fileName[, lineNumber]]])
message
{{optional_inline}}fileName
{{optional_inline}}{{Non-standard_inline}}fileName
dans l'objet Error
créé. Par défaut, ce sera le nom du fichier contenant le code qui a appelé le constructeur Error()
.lineNumber
{{optional_inline}}{{Non-standard_inline}}lineNumber
dans l'objet Error
créé. Par défaut, ce sera le numéro de la ligne contenant l'invocation du constructeur Error()
.Les erreurs d'exécution ont pour résultat la création et le déclenchement d'objets Error
.
Cette page documente l'utilisation de l'objet Error
lui-même et son utilisation comme fonction constructeur. Pour une liste des propriétés et des méthodes héritées par les instances d'Error
, voir {{jsxref("Error.prototype")}}.
Error
comme fonctionLorsqu'Error
est utilisée comme fonction sans utiliser l'opérateur {{jsxref("Opérateurs/L_opérateur_new", "new")}}, cet appel renverra un objet Error
. Aussi, un simple appel à Error
produira le même résultat qu'une invocation avec new
.
// Cette instruction : const x = Error("J'ai été créée sans new"); // Aura le même effet que const y = new Error("J'ai été créée avec new");
En plus du constructeur Error
générique, il existe sept autres constructeurs d'erreur de base en JavaScript. Pour les exceptions côté client, voir Contrôle du flux d'instructions et gestion des erreurs.
Error
.L'objet global Error
ne contient pas de méthodes en propre, toutefois, il hérite de certaines méthodes via la chaine de prototype.
Error
{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Propriétés')}}
{{page('fr/docs/JavaScript/Reference/Objets_globaux/Error/prototype', 'Méthodes')}}
Vous créez habituellement un objet Error
dans l'intention de le déclencher en utilisant le mot-clé {{jsxref("Instructions/throw", "throw")}}. Vous pouvez gérer l'erreur en utilisant la construction {{jsxref("Instructions/try...catch", "try...catch")}} :
try { throw new Error("Ouups !"); } catch (e) { console.log(e.name + ": " + e.message); }
Vous pouvez choisir de ne gérer que des types d'erreur particuliers en testant le type de l'erreur via la propriété {{jsxref("Object.prototype.constructor", "constructor")}} de l'erreur ou, si vous écrivez pour des interpréteurs JavaScript modernes, le mot-clé {{jsxref("Opérateurs/instanceof", "instanceof")}} :
try { machin.truc(); } catch (e) { if (e instanceof EvalError) { console.log(e.name + ": " + e.message); } else if (e instanceof RangeError) { console.log(e.name + ": " + e.message); } // ... etc }
Vous pouvez vouloir définir vos propres types d'erreur dérivants d'Error
pour pouvoir écrire throw new MonErreur()
et utiliser instanceof MonErreur
afin de vérifier le type d'erreur dans le gestionnaire d'exceptions. Cela a pour résultat un code de gestion d'erreur plus propre et plus cohérent. Voir What's a good way to extend Error in JavaScript? sur StackOverflow pour une discussion en profondeur.
Attention : Babel, dans les versions antérieures à Babel 7, ainsi que d'autres transpileurs ne géreront pas correctement le code suivant sans configuration supplémentaire. Les versions de Babel antérieures à la version 7 peuvent uniquement gérer les classes d'erreur personnalisées lorsque celles-ci sont créées avec Object.defineProperty()
.
Note : Certains navigateurs incluent le constructeur CustomError
(Erreur Personnalisée) dans la pile d'appels lors de l'utilisation de classes ES6.
class CustomError extends Error { constructor(machin = 'truc', ...params) { // Passer les arguments restants (incluant ceux spécifiques au vendeur) au constructeur parent super(...params); // Maintenir dans la pile une trace adéquate de l'endroit où l'erreur a été déclenchée (disponible seulement en V8) if(Error.captureStackTrace) { Error.captureStackTrace(this, CustomError); } this.name = 'CustomError'; // Informations de déboguage personnalisées this.machin = machin; this.date = new Date(); } } try { throw new CustomError('bidule', 'messageBidule'); } catch(e){ console.log(e.name); // CustomError console.log(e.machin); // bidule console.log(e.message); // messageBidule console.log(e.stack); // stacktrace }
Attention : Tous les navigateurs incluent le constructeur CustomError
dans la pile d'appel lorsqu'une déclaration prototypale est utilisée.
function CustomError(machin, message, nomFichier, numeroLigne) { var instance = new Error(message, nomFichier, numeroLigne); instance.name = 'CustomError'; instance.machin = machin; Object.setPrototypeOf(instance, Object.getPrototypeOf(this)); if(Error.captureStackTrace) { Error.captureStackTrace(instance, CustomError); } return instance; } CustomError.prototype = Object.create(Error.prototype, { constructor: { value: Error, enumerable: false, writable: true, configurable: true } }); if (Object.setPrototypeOf){ Object.setPrototypeOf(CustomError, Error); } else { CustomError.__proto__ = Error; } try { throw new CustomError('bidule', 'messageBidule'); } catch(e){ console.log(e.name); // CustomError console.log(e.toto); // bidule console.log(e.message); // messageBidule console.log(e.lineNumber); // 29 }
Spécification | État | Commentaires |
---|---|---|
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}} | {{Spec2('ESDraft')}} | |
{{SpecName('ES2015', '#sec-error-objects', 'Error')}} | {{Spec2('ES2015')}} | |
{{SpecName('ES5.1', '#sec-15.11', 'Error')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Définition initiale. Implémentée avec JavaScript 1.1. |
{{Compat("javascript.builtins.Error")}}