`throw' foo'`,`throw Error(' foo')`,`throw new Error(' foo')`之间有什么区别?

时间:2017-09-19 08:18:14

标签: javascript error-handling throw

我已经看到了3种在JavaScript中抛出错误的方法:

throw 'message';
throw Error('message');
throw new Error('message');

他们之间有什么区别?

注意:我发现了类似的问题(123等。它们都不包括所有三种情况。

1 个答案:

答案 0 :(得分:3)

throwexpression,它会暂停该功能并生成exception。在{1}中直接跟随的是异常中传递的内容。可以把它想象成具有语法糖的函数,所以不要写throw而是写throw('message')throw 'message'就像throw new Error('message')一样,除了传递一个对象而不是一个字符串文字。

throw 'message'throw Error('message')之间的

There is no difference:许多核心JavaScript对象允许在没有throw new Error('message')构造函数的情况下创建新对象并发生new成为其中之一。

话虽如此,您应始终使用Error throw new Error('message')对象包含堆栈跟踪和其他有用的调试信息,这些信息在使用字符串文字时会丢失。使用ES6类创建对象需要使用Errorextending Error via a class是保留堆栈跟踪的唯一方法。创建自定义错误类可以使错误处理更加统一。

另请参阅:extremely elaborate illustration