Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. JavaScript
  3. JavaScript 参考
  4. JavaScript 标准内置对象
  5. Error
  6. Error: cause

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in EnglishAlways switch to English

Error: cause

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2021年9月.

Error 实例中的cause 数据属性指示导致该错误的具体原始原因。

在捕获错误时,我们可能会使用更具体或更加实用的信息对错误进行包装,再将其重新抛出。cause 属性就用于这一场景,以便仍然可以访问原始的错误。

取值

它通过options.cause 参数被传入Error() 构造函数,并且有可能不存在。

Error: cause 的属性特性
可写
可枚举
可配置

描述

cause 的值可以是任何类型。你不应该假设捕获错误的cause 属性是一个Error,正如在catch 语句中绑定的变量未必一定是Error。下文“将结构化的数据作为 cause”示例展示了刻意不提供Error 作为cause 的情况。

示例

重新抛出包含 cause 的错误

有时,捕获错误并使用新的错误信息将其重新抛出是很有用的。在这种情况下,你应该将原始错误传递给新的Error 的构造函数,如下所示:

js
try {  connectToDatabase();} catch (err) {  throw new Error("Connecting to database failed.", { cause: err });}

更详细的示例请参阅错误 > 区分相似的错误

将结构化的数据作为 cause

为开发者理解而编写的错误消息可能并不适合机器解析,因为它们会受到表达方式改变(rewording),或标点符号改变的影响,破坏已有解析器的正常使用。因此,当从函数中抛出错误时,你可以提供结构化的数据作为错误原因(即cause 字段)供机器解析,以此替代人类可读的错误消息。

js
function makeRSA(p, q) {  if (!Number.isInteger(p) || !Number.isInteger(q)) {    throw new Error("RSA key generation requires integer inputs.", {      cause: { code: "NonInteger", values: [p, q] },    });  }  if (!areCoprime(p, q)) {    throw new Error("RSA key generation requires two co-prime integers.", {      cause: { code: "NonCoprime", values: [p, q] },    });  }  // rsa algorithm…}

规范

Specification
ECMAScript® 2026 Language Specification
# sec-installerrorcause

浏览器兼容性

参见

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2026 Movatter.jp