var err1 = Error('message');
var err2 = new Error('message');
有什么不同?在 chrome 控制台中查看它们,它们看起来相同。对象上的相同属性和相同的__proto__
链。几乎看起来Error
就像一个工厂。
哪一个是正确的,为什么?
var err1 = Error('message');
var err2 = new Error('message');
有什么不同?在 chrome 控制台中查看它们,它们看起来相同。对象上的相同属性和相同的__proto__
链。几乎看起来Error
就像一个工厂。
哪一个是正确的,为什么?
两者都很好;这在规范中明确说明:
...因此,函数调用
Error(…)
等效于new Error(…)
具有相同参数的对象创建表达式。
Error
确实像工厂一样,像其他一些本机构造函数一样:Array
,Object
等都检查类似if (!(this instanceof Array)) { return new Array(arguments); }
. (但请注意String(x)
andnew String(x)
非常不同,对于 and 也是如此Number
。Boolean
)
也就是说,如果发生错误,甚至不需要抛出一个Error
对象......throw 'Bad things happened';
也可以工作
您甚至可以抛出一个对象文字进行调试:
throw {message:"You've been a naughty boy",
context: this,
args: arguments,
more:'More custom info here'};