javascript - `throw ' foo '`, ` throw Error ('foo' )`, ` throw new Error ('foo' )` 有什么区别?

标签 javascript error-handling throw

我见过在 JavaScript 中抛出错误的 3 种不同方式:

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

它们有什么区别?

注意:我知道类似的问题(123 等)。它们都没有涵盖所有三种情况。

最佳答案

throw 是一个 expression这会停止函数并生成一个 exception .直接跟在 throw 之后的任何内容都会在异常中传递。将其视为具有语法糖的函数,因此您无需编写 throw('message'),而是编写 throw 'message'throw new Error('message')throw 'message' 类似,只是传递的是对象而不是字符串文字。

There is no differencethrow Error('message')throw new Error('message') 之间:许多核心 JavaScript 对象允许在没有 new 构造函数和 Error 恰好是其中之一。

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

另请参阅:extremely elaborate illustration .

关于javascript - `throw ' foo '`, ` throw Error ('foo' )`, ` throw new Error ('foo' )` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46295340/

相关文章:

ios - 在调试器中出现错误 : This app has attempted to access privacy-sensitive data without a usage description

c++ - 抛出一个右值

java - 在Spring Integration中处理异常时遇到麻烦

javascript - 使用 Chart.Js 绘制最高(绿色)和最低(红色)坐标图

javascript - 在 IE 9 上等待异步脚本超时

javascript - 保留通过 JavaScript 客户端的身份验证?

java - 一个线程中的异常/错误可以停止整个应用程序吗?

java - 拦截异常并将其翻译为另一种语言

node.js - 无法捕获nodejs和mongodb中的错误

javascript - AngularJS 显示数组中的列表