首页 文章

Javascript for Error()中的'new'运算符处理[重复]

提问于
浏览
1

这个问题在这里已有答案:

我正在使用Promises,并发现当建议拒绝传递 Error() 对象作为参数时,为了启用错误处理 .

我找到了一些例子,其中给出了 new Error() ,而另一些例子只传递了 Error() .

在测试了几个案例之后,我发现在一个用法和另一个用法之间没有任何区别,正如这里看到的两个拒绝似乎表现完全相同:

const p = new Promise((resolve, reject) => {

    setTimeout(reject, 1000, Error("Nope...")); 
    //setTimeout(reject, 1000, new Error("Nope..."));       
});    


p.then(val => { console.log(val) })
.catch(error  => { console.error(error.message) });

在这种情况下,两种错误处理方式之间存在哪些实际差异?

1 回答

  • 2

    在测试了几个案例后,我发现一个用法和其他用法之间没有任何区别......

    那是因为当你将 Error 称为函数(没有 new )时,它的行为与你用 new 调用的行为完全相同 . 也就是说, Error(x)new Error(x) 完全一样 . 这是 Error 函数的"feature" . 通常情况下,调用一个没有new的函数和用 new 调用它之间有区别,就在这种情况下不行 .

    the spec

    Error构造函数:... ...在作为函数而不是构造函数调用时创建并初始化新的Error对象 . 因此,函数调用Error(...)等效于具有相同参数的对象创建表达式new Error(...) . ...

相关问题