web-dev-qa-db-fra.com

Javascript - pouvez-vous lancer un objet dans une erreur?

Est-il possible de lancer un objet en utilisant Error? Dans l'exemple ci-dessous, la console affiche undefined.

try {
    throw Error({foo: 'bar'});
} catch (err) {
    console.log(err.message.foo);
}
11
JoeTidee

Vous pouvez lancer votre propre objet et lui associer une instance d'erreur:

try {
  // ...
  throw {
    foo: "bar",
    error: new Error()
  };

L'instruction throw n'est pas difficile, mais le constructeur Error() l'est. Bien sûr, si vous lancez quelque chose qui n'est pas une erreur, cela n'est utile que si l'environnement de capture s'attend à ce que ce soit ce que vous lancez.

Avoir l'objet Error ayant une partie de votre valeur levée personnalisée est utile car une instance d'erreur construite a (dans les navigateurs pris en charge, qui semblent actuellement être essentiellement tous) une trace de pile associée.

20
Pointy

Vous pouvez essayer de convertir l'objet en une chaîne JSON, puis d'analyser le message d'erreur en un objet JSON dans l'instruction catch:

try {
    throw Error(JSON.stringify({foo: 'bar'}));
} catch (err) {
    console.log(JSON.parse(err.message).foo);
}
5
Keveloper