216 votes

throw Error('msg') vs throw new Error('msg')

var err1 = Error('message');
var err2 = new Error('message');

Quelle est la différence ? En les regardant dans la console de chrome, ils semblent identiques. Les mêmes propriétés sur l'objet et le même __proto__ chaîne. On dirait presque Error agit comme une usine.

Lequel est correct et pourquoi ?

218voto

pimvdb Points 66332

Les deux sont acceptables, comme le stipule explicitement le document la spécification :

... Ainsi, l'appel de fonction Error(…) est équivalent à l'expression de création d'objet new Error(…) avec les mêmes arguments.

24voto

Elias Van Ootegem Points 29404

Error agit comme une usine, comme d'autres constructeurs natifs : Array , Object etc., vérifient tous quelque chose comme if (!(this instanceof Array)) { return new Array(arguments); } . (Mais notez que String(x) y new String(x) sont très différentes, et de même pour Number y Boolean .)

Ceci dit, en cas d'erreur, il n'est même pas nécessaire de lancer un Error objet... throw 'Bad things happened'; fonctionnera aussi
Vous pouvez même lancer un objet littéral pour le débogage :

throw {message:"You've been a naughty boy",
       context: this,
       args: arguments,
       more:'More custom info here'};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X