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

View in English Always switch to English

Error() 构造函数

基线 广泛可用

自 2015年7月 起,此特性已在主流浏览器中得到支持,可在大多数设备和浏览器版本中正常使用。

>

Error() 构造函数能够创建一个包含错误信息的对象。

语法

js
new Error()
new Error(message)
new Error(message, options)
new Error(message, fileName)
new Error(message, fileName, lineNumber)
Error()
Error(message)
Error(message, options)
Error(message, fileName)
Error(message, fileName, lineNumber)

备注:调用 Error() 时,可以使用关键字 new,也可以不使用。两种声明方式均能创建一个新的 Error 实例。

参数

message 可选

人类可读的错误信息。

options 可选

一个包含以下属性的对象:

cause 可选

指示错误的具体原因,反映在 cause 属性中。当捕获并重新抛出带有更具体或有用的错误消息的错误时,可以使用此属性传递原始错误。

fileName 可选

引发此错误的文件路径,反映在 fileName 属性中。默认为调用 Error() 构造函数的代码所在文件的名称。

lineNumber 可选

引发错误的文件中的行号,反映在 lineNumber 属性中。默认为包含 Error() 构造函数调用的行号。

示例

>

函数调用与构造函数

Error 作为函数使用,即不包含 new 关键字时,它将返回一个 Error 对象。因此,直接调用 Error 函数将产生与使用 new 关键字构造 Error 对象相同的输出。

js
const x = Error("I was created using a function call!");
// 上述代码与以下代码具有相同的功能
const y = new Error('I was constructed via the "new" keyword!');

使用 cause 重新抛出错误

在捕获错误时,我们可能会使用新的错误信息对错误进行包装,再将其重新抛出。这种场景下,你应当将原始错误也传入新的 Error 的构造函数,如下所示:

js
try {
  frameworkThatCanThrow();
} catch (err) {
  throw new Error("New error message", { cause: err });
}

更多示例参考错误 > 区分相似的错误

省略 options 参数

JavaScript 只有在 options 参数为对象时才会尝试读取 options.cause 属性,这样可以避免与另一种非标准的 Error(message, fileName, lineNumber) 函数签名产生歧义,后者要求第二个参数必须是字符串。如果你省略了 options 参数,或者将原始值作为 options 传入,又或者传递的对象中没有 cause 属性,那么创建的 Error 对象将不会包含 cause 属性。

js
// 省略 options
const error1 = new Error("Error message");
console.log("cause" in error1); // false

// 传递原始值
const error2 = new Error("Error message", "");
console.log("cause" in error2); // false

// 传递不包含 cause 属性的对象
const error3 = new Error("Error message", { details: "http error" });
console.log("cause" in error3); // false

规范

规范
ECMAScript® 2027 Language Specification>
# sec-error-constructor>

浏览器兼容性

参见