抛出错误(' msg')vs抛出新错误(' msg')

时间:2012-11-08 17:42:04

标签: javascript exception

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

有什么区别?在Chrome控制台中查看它们,它们看起来完全相同。对象和相同__proto__链上的相同属性。几乎看起来Error就像工厂一样。

哪一个是正确的,为什么?

2 个答案:

答案 0 :(得分:132)

两者都很好;这在the specification中明确说明:

  

...因此函数调用Error(…)等同于具有相同参数的对象创建表达式new Error(…)

答案 1 :(得分:15)

Error确实像工厂一样,实际上几乎所有的原生构造者都这样做:ArrayObject,...都检查if (!(this instanceof Array)){ return new Array(arguments);}

那就是说,如果出现错误,甚至不需要抛出一个Error对象... throw 'Bad things happened';也可以工作。你甚至可以抛出一个对象文字进行调试:

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