var err1 = Error('message');
var err2 = new Error('message');
有什么区别?在Chrome控制台中查看它们,它们看起来完全相同。对象和相同__proto__
链上的相同属性。几乎看起来Error
就像工厂一样。
哪一个是正确的,为什么?
答案 0 :(得分:132)
两者都很好;这在the specification中明确说明:
...因此函数调用
Error(…)
等同于具有相同参数的对象创建表达式new Error(…)
。
答案 1 :(得分:15)
Error
确实像工厂一样,实际上几乎所有的原生构造者都这样做:Array
,Object
,...都检查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'};