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.

Syntaxe

new Error([message[, nomFichier[, numeroLigne]]])

Paramètres

message
Optionnel. Description de l'erreur sous une forme lisible par un humain.
nomFichier 
Optionnel. Valeur de la propriété fileName dans l'objet Error créé. Par défaut, nom du fichier contenant le code qui a appelé le constructeur Error().
numeroLigne 
Optionnel. Valeur de la propriété lineNumber dans l'objet Error créé. Par défaut, numéro de la ligne contenant l'invocation du constructeur Error().

Description

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 Error.prototype.

Utilisation de Error comme fonction

Lorsqu'Error est utilisée comme fonction sans utiliser l'opérateur 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");

Types d'erreur

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.

EvalError
Crée une instance représentant une erreur se produisant en relation avec la fonction globale eval().
InternalError
Crée une instance représentant une erreur se produisant quand une erreur interne dans le moteur JavaScript est déclenchée. Par ex., "too much recursion".
RangeError
Cré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é.
ReferenceError
Crée une instance représentant une erreur se produisant lors du déréférencement d'une référence invalide.
SyntaxError
Crée une instance représentant une erreur de syntaxe se produisant lors d'une analyse de code dans eval().
TypeError
Crée une instance représentant une erreur se produisant quand une variable ou un paramètre n'est pas d'un type valide.
URIError
Crée une instance représentant une erreur se produisant quand des paramètres invalides sont passés à encodeURI() ou à decodeURI().

Propriétés

Error.prototype
Permet l'ajout de propriétés aux instances Error.

Méthodes

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.

Instances d'Error

All Error instances and instances of non-generic errors inherit from Error.prototype. As with all constructor functions, you can use the prototype of the constructor to add properties or methods to all instances created with that constructor.

Propriétés

Standard properties

Error.prototype.constructor
Specifies the function that created an instance's prototype.
Error.prototype.message
Error message.
Error.prototype.name
Error name.

Vendor-specific extensions

Non-standard
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

Microsoft

Error.prototype.description
Error description. Similar to message.
Error.prototype.number
Error number.

Mozilla

Error.prototype.fileName
Path to file that raised this error.
Error.prototype.lineNumber
Line number in file that raised this error.
Error.prototype.columnNumber
Column number in line that raised this error.
Error.prototype.stack
Stack trace.

Méthodes

Error.prototype.toSource()
Returns a string containing the source of the specified Error object; you can use this value to create a new object. Overrides the Object.prototype.toSource() method.
Error.prototype.toString()
Returns a string representing the specified object. Overrides the Object.prototype.toString() method.

Exemples

Déclenchement d'une erreur générique

Vous créez habituellement un objet Error dans l'intention de le déclencher en utilisant le mot-clé throw. Vous pouvez gérer l'erreur en utilisant la construction try...catch :

try {
    throw new Error("Ouups !");
} catch (e) {
    console.log(e.name + ": " + e.message);
}

Gestion d'une erreur spécifique

Vous pouvez choisir de ne gérer que des types d'erreur particuliers en testant le type de l'erreur via la propriété constructor de l'erreur ou, si vous écrivez pour des interpréteurs JavaScript modernes, le mot-clé 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
}

Types d'erreur personnalisés

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.

Classes d'erreur personnalisées avec ECMAScript 2015 / ES6

Attention ! Babel et d'autres transpileurs ne géreront pas correctement le code suivant sans configuration supplémentaire. Babel peut uniquement gérer les classes d'erreur personnalisées lorsque celles-ci sont créées avec Object.defineProperty().

Note : Certains navigateurs incluent le constructeur ErreurPersonnalisee dans la pile d'appels lors de l'utilisation de classes ES6.

class ErreurPersonnalisee 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, ErreurPersonnalisee);
    }

    // Informations de déboguage personnalisées
    this.machin = machin;
    this.date = new Date();
  }
}

try {
  throw new ErreurPersonnalisee('bidule', 'messageBidule');
} catch(e){
  console.log(e.machin);  // bidule
  console.log(e.message); // messageBidule
  console.log(e.stack);   // stacktrace
}

Objet d'erreur personnalisé ES5

Attention ! Tous les navigateurs incluent le constructeur ErreurPersonnalisee dans la pile  d'appel lorsqu'une déclaration prototypale est utilisée.

function ErreurPersonnalisee(machin, message, nomFichier, numeroLigne) {
  var instance = new Error(message, nomFichier, numeroLigne);
  instance.machin = machin;
  Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
  if(Error.captureStackTrace) {
    Error.captureStackTrace(instance, ErreurPersonnalisee);
  }
  return instance;
}

ErreurPersonnalisee.prototype = Object.create(Error.prototype, {
  constructor: {
    value: Error,
    enumerable: false,
    writable: true,
    configurable: true
  }
});

if (Object.setPrototypeOf){
  Object.setPrototypeOf(ErreurPersonnalisee, Error);
} else {
  ErreurPersonnalisee.__proto__ = Error;
}


try {
  throw new ErreurPersonnalisee('bidule', 'messageBidule');
} catch(e){
  console.log(e.toto);     // bidule
  console.log(e.message);  // messageBidule
}

Spécifications

Spécification État Commentaires
ECMAScript 1st Edition (ECMA-262) Standard Définition initiale. Implémentée avec JavaScript 1.1.
ECMAScript 5.1 (ECMA-262)
La définition de 'Error' dans cette spécification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Error' dans cette spécification.
Standard  
ECMAScript Latest Draft (ECMA-262)
La définition de 'Error' dans cette spécification.
Projet  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari pour iOSSamsung InternetNode.js
Support simpleChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet 6Opera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
prototypeChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet 6Opera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
columnNumber
Non-standard
Chrome Aucun support NonEdge Aucun support NonFirefox Support complet 1IE Aucun support NonOpera Aucun support NonSafari Aucun support NonWebView Android Aucun support NonChrome Android Aucun support NonEdge Mobile Aucun support NonFirefox Android Support complet 4Opera Android Aucun support NonSafari iOS Aucun support NonSamsung Internet Android Aucun support Nonnodejs Aucun support Non
fileName
Non-standard
Chrome Aucun support NonEdge Aucun support NonFirefox Support complet 1IE Aucun support NonOpera Aucun support NonSafari Aucun support NonWebView Android Aucun support NonChrome Android Aucun support NonEdge Mobile Aucun support NonFirefox Android Support complet 4Opera Android Aucun support NonSafari iOS Aucun support NonSamsung Internet Android Aucun support Nonnodejs Aucun support Non
lineNumber
Non-standard
Chrome Aucun support NonEdge Aucun support NonFirefox Support complet 1IE Aucun support NonOpera Aucun support NonSafari Aucun support NonWebView Android Aucun support NonChrome Android Aucun support NonEdge Mobile Aucun support NonFirefox Android Support complet 4Opera Android Aucun support NonSafari iOS Aucun support NonSamsung Internet Android Aucun support Nonnodejs Aucun support Non
messageChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet 6Opera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
nameChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet 6Opera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
stack
Non-standard
Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet 10Opera Support complet OuiSafari Support complet 6WebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet 6Samsung Internet Android Support complet Ouinodejs Support complet Oui
toSource
Non-standard
Chrome Aucun support NonEdge Aucun support NonFirefox Support complet 1IE Aucun support NonOpera Aucun support NonSafari Aucun support NonWebView Android Aucun support NonChrome Android Aucun support NonEdge Mobile Aucun support NonFirefox Android Support complet 4Opera Android Aucun support NonSafari iOS Aucun support NonSamsung Internet Android Aucun support Nonnodejs Aucun support Non
toStringChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet 6Opera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Fonctionnalité non-standard. Celle-ci peut être incorrectement supportée par les autres navigateurs.
Fonctionnalité non-standard. Celle-ci peut être incorrectement supportée par les autres navigateurs.

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
Dernière mise à jour par : SphinxKnight,