Error

Un objet d’erreur intégré avec un message et une pile d’appels. La base des exceptions et des classes d’erreurs personnalisées.

Renvoie
Un nouvel objet Error.
Sur cette page

Exemple

#
JavaScript
const error = new Error('Leçon introuvable')

console.log(error.name)
console.log(error.message)
console.log(error instanceof Error)
console.log(error)
Console
Error
Leçon introuvable
true
Error: Leçon introuvable

Définition et utilisation

#

Error est une classe intégrée qui décrit une erreur. Vous la créez avec new Error("message"), et le plus souvent vous la levez immédiatement avec throw. Chaque erreur a un champ name avec le type d’erreur, message avec la description, et stack, c’est-à-dire la trace des appels menant à l’endroit où elle est née. La pile d’appels aide à trouver la source du problème.

JavaScript a plusieurs variantes d’erreurs intégrées : TypeError (mauvais type, par ex. appeler quelque chose qui n’est pas une fonction), RangeError (valeur hors de la plage autorisée), SyntaxError (syntaxe incorrecte, par ex. dans le texte passé à JSON.parse()), ReferenceError (référence à une variable inexistante) et URIError. Toutes héritent de Error, donc instanceof Error renvoie true pour elles. AggregateError regroupe plusieurs erreurs à la fois, par ex. depuis Promise.any().

Vous créez vos propres classes d’erreurs avec extends Error. Il vaut la peine d’y définir name et d’ajouter des champs avec des informations supplémentaires, par ex. le nom d’un champ de formulaire. L’option cause dans le second argument, new Error("message", { cause }), joint la cause : l’erreur d’origine ou des données qui aideront à comprendre ce qui s’est mal passé.

Syntaxe

#
Syntaxe
new Error()
new Error(message)
new Error(message, { cause })

error.name
error.message
error.cause
error.stack

Paramètres

#
  • message

    chaîne, optionnel

    La description de l’erreur. Elle va dans le champ error.message.
  • options

    objet, optionnel

    Un objet avec un champ cause, c’est-à-dire la cause de l’erreur, le plus souvent une autre erreur.

Plus d’exemples

#
Hiérarchie d’erreurs personnalisées
JavaScript
class AppError extends Error {
  constructor(message, options) {
    super(message, options)
    this.name = this.constructor.name
  }
}

class NotEnoughFuelError extends AppError {
  constructor(needed, available) {
    super(`Besoin de ${needed} carburant, vous avez ${available}`)
    this.needed = needed
  }
}

try {
  throw new NotEnoughFuelError(3, 1)
} catch (error) {
  console.log(error)
  console.log(error instanceof AppError, error instanceof Error)
  console.log(error.needed)
}
Console
NotEnoughFuelError: Besoin de 3 carburant, vous avez 1
true true
3

La classe de base définit name sur le nom de la classe réelle, donc chaque nouveau type d’erreur reçoit le bon nom sans répéter de code. Si votre outil de build raccourcit les noms de classes, écrivez name manuellement.

La cause de l’erreur dans cause
JavaScript
function saveScore(response) {
  if (!response.ok) {
    throw new Error('Score non enregistré', { cause: { status: response.status } })
  }
  return 'Enregistré'
}

try {
  saveScore({ ok: false, status: 503 })
} catch (error) {
  console.log(error.message)
  console.log(error.cause)
}
Console
Score non enregistré
{ status: 503 }
Types d’erreurs intégrés
JavaScript
const attempts = [
  () => null.length,
  () => new Array(-1),
  () => JSON.parse('{cassé'),
  () => missingVariable
]

for (const attempt of attempts) {
  try {
    attempt()
  } catch (error) {
    console.log(error.name, error instanceof Error)
  }
}
Console
TypeError true
RangeError true
SyntaxError true
ReferenceError true

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Écrivez des messages qui disent ce qui s’est passé et quoi faire ensuite. « Plus de carburant. Revenez demain » aidera plus que « Erreur 17 ».
  • Définissez name dans vos propres classes d’erreurs. Sans cela, la console et les logs afficheront un « Error » générique, et dans catch il est plus difficile de reconnaître le type de problème.
  • Le champ stack est utile pour le débogage, mais son format diffère selon les navigateurs. Ne l’analysez pas dans la logique du programme et ne le montrez pas aux utilisateurs.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.