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.
Exemple
#const error = new Error('Leçon introuvable')
console.log(error.name)
console.log(error.message)
console.log(error instanceof Error)
console.log(error)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
#new Error()
new Error(message)
new Error(message, { cause })
error.name
error.message
error.cause
error.stackParamètres
#message
chaîne, optionnel
La description de l’erreur. Elle va dans le champerror.message.options
objet, optionnel
Un objet avec un champcause, c’est-à-dire la cause de l’erreur, le plus souvent une autre erreur.
Plus d’exemples
#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)
}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.
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)
}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)
}
}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
namedans vos propres classes d’erreurs. Sans cela, la console et les logs afficheront un « Error » générique, et danscatchil est plus difficile de reconnaître le type de problème. - Le champ
stackest 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
#- throwLève une exception : interrompt le code en cours et transmet l’erreur au bloc catch le plus proche.
- try...catchCapture les erreurs levées dans un bloc try et les traite dans catch. Un finally optionnel s’exécute toujours.
- extendsCrée une classe dérivée qui hérite des méthodes d’une autre classe et peut les étendre ou les redéfinir.
- instanceofVérifie si un objet a été créé par une classe donnée, ou par une classe qui en hérite.
- Promise.prototype.catch()Enregistre une fonction de gestion d’erreur, appelée quand la promesse est rejetée.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.