Le constructeur Error crée un objet représentant une erreur. Des instances d'objets Error sont levées lorsqu'une erreur d'exécution survient. L'objet Error peut aussi être utilisé comme objet de base (étendu ensuite) pour représenter des erreurs définies par l'utilisateur. Voir ci-dessous pour les différents types d'erreur natifs.

Syntaxe

new Error([message[, fileName[, lineNumber]]])

Paramètres

message
Description de l'erreur sous une forme compréhensible pour un humain
fileName
Paramètre optionnel, nom du fichier dont le code a levé l'exception. Par défaut, il s'agira du fichier contenant l'invocation du constructeur Error().
lineNumber
Paramètre optionnel, numéro de ligne dans le code à l'origine de l'exception. Par défaut, il s'agira de la ligne qui contient l'invocation du constructeur Error().

Description

Une erreur survenant pendant l'exécution du programme entraîne la création et la levée d'un objet Error.

Cette page ne se concentre que sur l'objet Error en tant que tel, ainsi que la manière de l'utiliser comme constructeur. La liste des propriétés et méthodes disponibles par héritage dans les instances de l'objet Error peut être trouvée sur la page Error.prototype.

Types d'erreur

Il existe, en plus du constructeur générique Error, six autres constructeurs d'erreurs natifs en JavaScript. Les exceptions causées par le client sont détaillées dans l'article sur la gestion des exceptions.

EvalError
Crée une instance d'une erreur survenue suite à l'utilisation de la fonction globale eval().
RangeError
Crée une instance d'erreur survenue suite à l'utilisation d'une variable numérique ou d'un paramètre hors de son intervalle de valeurs.
ReferenceError
Crée une instance d'erreur survenue suite au dé-référencement d'une référence invalide.
SyntaxError
Crée une instance d'erreur survenue suite à une erreur de syntaxe lors de la lecture du code par la fonction eval().
TypeError
Crée une instance d'erreur survenue lorsqu'une variable ou un paramètre n'est pas d'un type valide.
URIError
Crée une instance d'erreur survenue lors d'un passage de paramètres invalides aux fonctions encodeURI() ou decodeURI().

Propriétés

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

Méthodes

L'objet global Error ne contient pas de méthodes en propre, mais il hérite de certaines méthodes par la chaine de prototype.

Instances de Error

Propriétés

Méthodes

Exemples

Lever une erreur générique

On utilisera le mot-clé throw pour lever une exception. L'erreur générée peut ensuite être « gérée » en utilisant l'instruction try...catch :

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

Gérer une erreur spécifique

Vous pouvez choisir de ne gérer qu'un type bien spécifique d'erreur en vérifiant son type via la propriété constructor de l'erreur, ou, si vous utilisez plutôt des interpréteurs Javascript modernes, le mot-clé instanceof :

try {
    toto.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

Dans certains cas, on veut pouvoir définir ses propres types d'erreur, dérivants d'Error pour être capable d'écrire throw new MonErreurSpecifique() et d'utiliser instanceof MonErreurSpecifique afin de vérifier le type d'erreur levée dans le gestionnaire d'exceptions. Cela permet d'avoir un code de gestion d'erreur plus cohérent (pour une discusion plus approfondie, voir "What's a good way to extend Error in JavaScript?" (« Quelles sont les bonnes façons d'étendre Error en JavaScript ? ») sur StackOverflow).

Des classes d'erreur personnalisées

Attention ! Babel et les autres transpileurs peuvent ne pas gérer ces cas correctement sans configuration supplémentaire.

Note : Certains navigateurs incluent le constructeur MonErreurSpecifique dans la pile d'appels lorsque des classes ES6 sont utilisées.

class MonErreurSpecifique extends Error {
  constructor(toto = 'truc', ...params) {
    // On passe les autres arguments (éventuellement
    // spécifiques à l'éditeur du navigateur)
    // au constructeur parent
    super(...params);
    // avec le moteur V8, on peut utiliser captureStackTrace
    // afin de garder le contexte où l'erreur a été levée
    if(Error.captureStackTrace){
      Error.captureStackTrace(this, MonErreurSpecifique);
    }
    // On ajoute des informations supplémentaires
    // pour le débogage
    this.toto = toto;
    this.date = new Date();
  }
}

try {
  throw new MonErreurSpecifique('bidule', 'MessageBidule');
} catch(e){
  console.log(e.toto);    // bidule
  console.log(e.message); // MessageBidule
  console.log(e.stack);   // stacktrace
}

Objets d'erreur personnalisés ES5

Attention ! Tous les navigateurs incluent le constructeur MonErreurSpecifique dans la pile  d'appel lorsqu'on utilise une déclaration prototypale.

function MonErreurSpecifique(toto, message, fileName, lineNumber) {
  var instance = new Error(message, fileName, lineNumber);
  instance.toto = toto;
  Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
  if(Error.captureStackTrace){
    Error.captureStackTrace(instance, MonErreurSpecifique);
  }
  return instance;
}

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

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


try {
  throw new MonErreurSpecifique('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.
Standard évolutif  

Compatibilité des navigateurs

FonctionnalitéChromeEdgeFirefoxInternet ExplorerOperaSafari
Support simple Oui Oui Oui6 Oui Oui
prototype Oui Oui Oui6 Oui Oui
columnNumber Non Non Oui Non Non Non
fileName Non Non Oui Non Non Non
lineNumber Non Non Oui Non Non Non
message Oui Oui Oui6 Oui Oui
name Oui Oui Oui6 Oui Oui
stack Oui Oui Oui10 Oui6
toSource Non Non Oui Non Non Non
toString Oui Oui Oui6 Oui Oui
FonctionnalitéAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Support simple Oui Oui Oui Oui8.1 Oui Oui
prototype Oui Oui Oui Oui8.1 Oui Oui
columnNumber Non Non Non Oui Non Non Non
fileName Non Non Non Oui Non Non Non
lineNumber Non Non Non Oui Non Non Non
message Oui Oui Oui Oui8.1 Oui Oui
name Oui Oui Oui Oui8.1 Oui Oui
stack Oui Oui Oui Oui ? Oui6
toSource Non Non Non Oui Non Non Non
toString Oui Oui Oui Oui8.1 Oui Oui

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : SphinxKnight, gouroujo, teoli, Goofy, tregagnon, fscholz, rd6137
 Dernière mise à jour par : SphinxKnight,