Dans JS, il ne semble pas possible de vérifier si un argument passé à une fonction est en fait du type "error" ou une instance de Error.
Par exemple, ce n'est pas valide:
typeof err === 'error'
puisqu'il n'y a que 6 types possibles (sous forme de chaînes):
L'opérateur typeof renvoie les informations de type sous forme de chaîne. Il y a six valeurs possibles qui typeofretournent:
"nombre", "chaîne", "booléen", "objet", "fonction" et "indéfini".
Mais que faire si j'ai un cas d'utilisation simple comme celui-ci:
function errorHandler(err) {
if (typeof err === 'error') {
throw err;
}
else {
console.error('Unexpectedly, no error was passed to error handler. But here is the message:',err);
}
}
Alors, quelle est la meilleure façon de déterminer si un argument est une instance d'Erreur?
l' instanceofopérateur est-il d'une aide quelconque?
err(disons) une iframe, mais que vous la passez ensuite à la fenêtre parent pour la remise, vous obtiendrez (err instanceof Error) === false. C'est parce que l'iframe et sa fenêtre parente ont des Errorprototypes d'objets distincts et différents . De même, un objet comme obj = {};will, lorsqu'il est passé à une fonction s'exécutant dans une fenêtre différente, yeild (obj instanceof Object)===false. (Pire encore, dans IE, si vous conservez une référence à obj après que sa fenêtre soit détruite ou parcourue, essayer d'appeler des objets prototypes fns comme obj.hasOwnProperty()cela provoquera des erreurs!)
catch((err)=>{if (err === ENOENT)renvoie une ENOENT is not definederreur?
err instanceof Error