Error: cause
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 |
浏览器兼容性
加载中…