Javascript中的“ new”运算符,用于Error()处理

时间:2018-12-09 13:30:40

标签: javascript error-handling es6-promise

我正在与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 个答案:

答案 0 :(得分:2)

  

在测试了几种情况后,我发现一种用法与另一种用法之间没有任何区别...

那是因为当您将Error作为函数调用时(没有new),它的行为就像您使用new进行调用一样。也就是说,Error(x)new Error(x)的作用完全相同。这是Error函数的“功能”。通常,在不使用new的情况下调用函数与使用new进行调用之间是有区别的,只是在这种情况下不会。

来自the spec

  

错误构造函数:

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