--- title: Error slug: Web/JavaScript/Reference/Global_Objects/Error tags: - Error - Whoops! - 参考 translation_of: Web/JavaScript/Reference/Global_Objects/Error ---
{{JSRef}}
通过Error的构造器可以创建一个错误对象。当运行时错误产生时,Error的实例对象会被抛出。Error对象也可用于用户自定义的异常的基础对象。下面列出了各种内建的标准错误类型。
new Error([message[, fileName[,lineNumber]]])
message
fileName
{{non-standard_inline}}lineNumber
{{non-standard_inline}}当代码运行时的发生错误,会创建新的Error
对象,并将其抛出。
该页面描述了Error对象自身的使用,以及其构造函数的使用. 关于Error实例的内部属性和方法,请看 {{jsxref("Error.prototype")}}。
当像函数一样使用 Error
时 -- 如果没有 {{jsxref("Operators/new", "new")}},它将返回一个 Error
对象。所以, 仅仅调用 Error
产生的结果与通过new
关键字构造 Error
对象生成的结果相同。
// this:
const x = Error('I was created using a function call!');
// has the same functionality as this:
const y = new Error('I was constructed via the "new" keyword!');
除了通用的Error构造函数外,JavaScript还有6个其他类型的错误构造函数。更多客户端异常,详见 Exception Handling Statements。
Error
实例。全局Error
对象自身不包含任何方法,但从原型链中继承了一些方法.
Error
实例{{page('en-US/docs/JavaScript/Reference/Global_Objects/Error/prototype', 'Description')}}
{{page('en-US/docs/JavaScript/Reference/Global_Objects/Error/prototype', 'Properties')}}
{{page('en-US/docs/JavaScript/Reference/Global_Objects/Error/prototype', 'Methods')}}
通常你会使用{{jsxref("Statements/throw", "throw")}}关键字来抛出你创建的Error对象。可以使用 {{jsxref("Statements/try...catch", "try...catch")}} 结构来处理异常:
try { throw new Error("Whoops!"); } catch (e) { alert(e.name + ": " + e.message); }
你可以通过判断异常的类型来特定处理某一类的异常,即判断 {{jsxref("Object.prototype.constructor", "constructor")}} 属性,当使用现代Javascript引擎时,可使用{{jsxref("Operators/instanceof", "instanceof")}} 关键字:
try { foo.bar(); } catch (e) { if (e instanceof EvalError) { alert(e.name + ": " + e.message); } else if (e instanceof RangeError) { alert(e.name + ": " + e.message); } // ... etc }
你可能希望自定义基于Error的异常类型,使得你能够 throw new MyError() 并可以使用 instanceof MyError
来检查某个异常的类型. 这种需求的通用解决方法如下.
注意,在FireFox中抛出自定义类型的异常会显示不正确的行号和文件名。
参考 "What's a good way to extend Error in JavaScript?" discussion on Stackoverflow.
// Create a new object, that prototypally inherits from the Error constructor. function MyError(message) { this.name = 'MyError'; this.message = message || 'Default Message'; this.stack = (new Error()).stack; } MyError.prototype = Object.create(Error.prototype); MyError.prototype.constructor = MyError; try { throw new MyError(); } catch (e) { console.log(e.name); // 'MyError' console.log(e.message); // 'Default Message' } try { throw new MyError('custom message'); } catch (e) { console.log(e.name); // 'MyError' console.log(e.message); // 'custom message' }
Specification | Status | Comment |
---|---|---|
ECMAScript 1st Edition. | Standard | Initial definition. Implemented in JavaScript 1.1. |
{{SpecName('ES5.1', '#sec-15.11', 'Error')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-error-objects', 'Error')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}} | {{Spec2('ESDraft')}} |