通过Error的构造器可以创建一个错误对象。当运行时错误产生时,Error的实例对象会被抛出。Error对象也可用于用户自定义的异常的基础对象。

  1. // this:
  2. const x = Error('I was created using a function call!');
  3. // has the same functionality as this:
  4. const y = new Error('I was constructed via the "new" keyword!');

Error 类型

EvalError创建一个error实例,表示错误的原因:与 eval() 有关。**`

RangeError创建一个error实例,表示错误的原因:数值变量或参数超出其有效范围。
ReferenceError创建一个error实例,表示错误的原因:无效引用。
SyntaxError创建一个error实例,表示错误的原因:eval()在解析代码的过程中发生的语法错误。TypeError创建一个error实例,表示错误的原因:变量或参数不属于有效类型。
URIError创建一个error实例,表示错误的原因:给 encodeURI()decodeURl()传递的参数无效。

例子

抛出一个基本错误

  1. try {
  2. throw new Error("Whoops!");
  3. } catch (e) {
  4. alert(e.name + ": " + e.message);
  5. }

处理一个特定错误

你可以通过判断异常的类型来特定处理某一类的异常,即判断 instanceof 关键字:

  1. try {
  2. foo.bar();
  3. } catch (e) {
  4. if (e instanceof EvalError) {
  5. alert(e.name + ": " + e.message);
  6. } else if (e instanceof RangeError) {
  7. alert(e.name + ": " + e.message);
  8. }
  9. // ... etc
  10. }

自定义异常类型

你可能希望自定义基于Error的异常类型,使得你能够 throw new MyError() 并可以使用 instanceof MyError 来检查某个异常的类型. 这种需求的通用解决方法如下.

  1. // Create a new object, that prototypally inherits from the Error constructor.
  2. function MyError(message) {
  3. this.name = 'MyError';
  4. this.message = message || 'Default Message';
  5. this.stack = (new Error()).stack;
  6. }
  7. MyError.prototype = Object.create(Error.prototype);
  8. MyError.prototype.constructor = MyError;
  9. try {
  10. throw new MyError();
  11. } catch (e) {
  12. console.log(e.name); // 'MyError'
  13. console.log(e.message); // 'Default Message'
  14. }
  15. try {
  16. throw new MyError('custom message');
  17. } catch (e) {
  18. if (e instanceof MyError)
  19. console.log(e.name); // 'MyError'
  20. console.log(e.message); // 'custom message'
  21. }