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 Facultatif
Description de l'erreur sous une forme lisible par un humain.
nomFichier Facultatif
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 Facultatif
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

Toutes les instances d'Error et les instances des erreurs non-génériques héritent de Error.prototype. Comme pour tous les constructeurs, on pouvez utiliser le prototype du constructeur pour ajouter des propriétés ou méthodes à l'ensemble des instances créées avec ce constructeur.

Propriétés

Propriétés standard

Error.prototype.constructor
La fonction créeant une instance du prototype.
Error.prototype.message
Le message de l'erreur.
Error.prototype.name
Le nom de l'erreur.

Extensions spécifiques à une implémentation

Non standard
Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.

Microsoft

Error.prototype.description
Description de l'erreur. Similaire à message.
Error.prototype.number
Numéro de l'erreur.

Mozilla

Error.prototype.fileName
Chemin vers le fichier qui a déclenché l'erreur.
Error.prototype.lineNumber
Numéro de la ligne qui a déclenché l'erreur dans le fichier.
Error.prototype.columnNumber
Numéro de la colonne qui a déclenché l'erreur dans le fichier.
Error.prototype.stack
Pile d'appels.

Méthodes

Error.prototype.toSource()
Renvoie une chaine de caractères contenant le code source de l'objet Error ; cette vlaeur peut être utilisée pour créer un nouvel objet. Elle remplace la méthode Object.prototype.toSource().
Error.prototype.toString()
Renvoie une chaine de caractères représentant l'objet. Elle remplace la méthode Object.prototype.toString().

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, 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 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);
    }
    this.name = '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.name);    // ErreurPersonnalisee
  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.name = 'ErreurPersonnalisee';
  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.name);     // ErreurPersonnalisee
  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 sur iOSSamsung InternetNode.js
ErrorChrome Support complet OuiEdge Support complet 12Firefox 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 12Firefox 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 12Firefox 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 12Firefox 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 Aucun support NonFirefox 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 12Firefox 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,