--- 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")}}