抛出错误('味精')与抛出新的错误('味精')

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

有什么不同? 看着他们在铬控制台,他们看起来完全相同。 对象和相同的__proto__链具有相同的属性。 几乎看起来像Error就像一个工厂。

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

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

…因此,调用Error(…)的函数等价于具有相同参数的对象创buildexpression式new Error(…)

Error确实像一个工厂,实际上几乎所有的本地构造函数都做: ArrayObject ,…所有检查的东西, 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'};