Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
throw 语句用于抛出用户自定义的异常。当前函数的执行将停止(throw 之后的语句不会被执行),并且控制权将传递给调用堆栈中第一个 catch 块。如果调用函数中没有 catch 块,则程序将终止。
抛出表达式。
throw 语句在任何可以使用语句的上下文中都有效。它的执行会产生一个在调用堆栈传播的异常。有关错误冒泡和处理的更多信息,请参阅控制流与错误处理。
throw 关键字后面可以跟任何类型的表达式,例如:
在实践中,你抛出的异常应该始终是 Error 对象或 Error 子类的实例,例如 RangeError。这是因为捕获错误的代码可能期望捕获的值具有一些属性,例如 错误信息。例如,Web API 通常会抛出 DOMException 实例,这些实例继承自 Error.prototype。
语法不允许在 throw 关键字和要抛出的表达式之间出现换行。
上面的代码经过自动分号补全(ASI)转换后变为:
这段代码无效,因为与 return 语句不同,throw 语句后面必须跟一个表达式。
为了避免这个问题(防止 ASI),可以使用括号:
此示例定义了一个函数,该函数在输入不是预期类型时抛出 TypeError 异常。
此示例调用了一个基于回调的异步函数,并在回调接收到错误时抛出错误。
通过这种方式抛出的错误无法被调用者捕获,并会导致程序崩溃,除非:(a)readFile 函数本身捕获了错误,或(b)程序在捕获顶级错误的上下文中运行。你可以使用 Promise() 构造函数更自然地处理错误。
| ECMAScript® 2027 Language Specification # sec-throw-statement |
启用 JavaScript 以查看此浏览器兼容性表。