我见过 3 种在 JavaScript 中引发错误的不同方式:
throw 'message';
throw Error('message');
throw new Error('message');
它们之间有什么区别?
注意:我知道类似的问题(1 https://stackoverflow.com/questions/9156176/what-is-the-difference-between-throw-new-error-and-throw-someobject,2 https://stackoverflow.com/questions/42053556/throw-vs-throw-new-error,3 https://stackoverflow.com/questions/13294658/throw-errormsg-vs-throw-new-errormsg, ETC)。它们都没有涵盖所有三种情况。
throw
is an 表达 https://en.wikipedia.org/wiki/Expression_(computer_science)它会停止该函数并生成一个例外 https://en.wikipedia.org/wiki/Exception_handling。直接跟随的内容throw
在异常中传递。将其视为带有语法糖的函数,因此不必编写throw('message')
你写throw 'message'
. throw new Error('message')
就像throw 'message'
只不过传递的是一个对象而不是字符串。
没有区别 http://es5.github.com/#x15.11.1之间throw Error('message')
and throw new Error('message')
:许多核心 JavaScript 对象允许创建新对象,而无需new
构造函数和Error
恰好是其中之一。
话虽如此,你应该总是使用throw new Error('message')
. The Error
对象包含堆栈跟踪和其他有用的调试信息,当您使用字符串文字时,这些信息会丢失。使用 ES6 类创建对象需要使用new
and 延伸Error通过班级 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types是保留堆栈跟踪的唯一方法。创建自定义错误类使错误处理更加统一。
也可以看看:极其精致的插图 https://cdn.rawgit.com/indolering/1b524795a44f67dc33540eb2e0e56af6/raw/fa8e50ed6c0ecdd5a1539010614646bb5e6e41ab/error-illustration.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)