抛出错误('味精')与抛出新的错误('味精')
var err1 = Error('message'); var err2 = new Error('message');
有什么不同? 看着他们在铬控制台,他们看起来完全相同。 对象和相同的__proto__
链具有相同的属性。 几乎看起来像Error
就像一个工厂。
哪一个是正确的,为什么?
两者都很好; 这在说明书中明确说明:
…因此,调用
Error(…)
的函数等价于具有相同参数的对象创buildexpression式new Error(…)
。
Error
确实像一个工厂,实际上几乎所有的本地构造函数都做: Array
, Object
,…所有检查的东西, if (!(this instanceof Array)){ return new Array(arguments);}
这就是说,如果发生错误,甚至不需要抛出一个Error
对象… throw 'Bad things happened';
也会工作
你甚至可以抛出一个对象文字来进行debugging:
throw {message:"You've been a naughty boy", context: this, args: arguments, more:'More custom info here'};