Error: cause

Baseline 已广泛支持

此功能已成熟,并可在多种设备和浏览器版本上运行。自 2021 年 9 月起,所有浏览器均已支持此功能。

Error 实例的 cause 数据属性表示错误的具体原始原因。

当捕获并重新抛出具有更具体或更有用错误消息的错误时,会使用此属性,以便仍然可以访问原始错误。

传递给 options.cause 参数的 Error() 构造函数的值。它可能不存在。

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

描述

cause 的值可以是任何类型。你不能假定你捕获的错误有一个 Error 作为其 cause,就像你不能确定 catch 语句中绑定的变量也是一个 Error 一样。下面的“提供结构化数据作为错误原因”示例展示了一个故意将非错误对象提供为原因的情况。

示例

使用 cause 重新抛出错误

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

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

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

提供结构化数据作为错误原因

为人类可读而编写的错误消息可能不适合机器解析 — 因为它们可能会被重写或标点符号更改,这可能会破坏任何现有的解析。因此,当从函数抛出错误时,作为人类可读错误消息的替代方案,你可以改用结构化数据作为原因,供机器解析。

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…
}

规范

规范
ECMAScript® 2026 语言规范
# sec-installerrorcause

浏览器兼容性

另见