JS中的Error对象和错误类型总结(一)

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

1. Error对象

1.1 语法

依据MDN web docs,创建Error对象为

new Error([message[, fileName[,lineNumber]]])

参数:

  • message:可选。人类可阅读的错误描述信息。
  • fileName:可选(仅在火狐浏览器生效)。被创建的Error对象的fileName属性值。默认是调用Error构造器代码所在的文件的名字。
  • lineNumber:可选(仅在火狐浏览器生效)。被创建的Error对象的lineNumber属性值。默认是调用Error构造器代码所在的文件的行号。

作为函数使用:

  • 当像函数一样使用 Error 时 -- 如果没有 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!');

1.2 Error对象的属性和方法

方法:

  • 全局Error对象自身不包含任何方法,但从原型链中继承了一些方法,在JavaScript中所有类都是Object的子类,所以其会包含一些继承自Object的类方法。

属性:

  • Error类也没有自身定义的类属性,其所有属性据来自于其父类Object

  • 允许通过Error.prototype添加属性到Error实例

1.3 Error实例

Error实例包含以下属性或方法:

  • Error.prototype.constructor - 指定对象的构造函数
  • Error.prototype.message - 错误信息
  • Error.prototype.name - 错误名
  • Error.prototype.stack - 错误堆栈信息。该属性是一个非标准属性,但被大多数执行引擎所支持。
  • Error.prototype.toString() - 表示错误对象的描述信息。继承并重写Object.prototype.toString()

1.4 Error实例使用

通常,可以在创建Error实例后,通过throw关键字抛出。和大多数语言一样,JavaScript提供了try...catch结构来捕获和处理错误:

try {
  throw new Error('Whoops!');
} catch (e) {
  console.log(e.name + ': ' + e.message);
}

捕获错误后,可以通过instanceof关键字来判断错误类型:

try {
  foo.bar();
} catch (e) {
  if (e instanceof EvalError) {
    console.log(e.name + ': ' + e.message);
  } else if (e instanceof RangeError) {
    console.log(e.name + ': ' + e.message);
  }
  // ... etc
}

当JavaScript内置错误类型不能满足需要时,还可以自定义错误。自定义错误就是继承Error对象,并对其进行一定的扩展:

// 创建一个新对象,并以原型链的方式 Error 
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'
}
暂无评论

发送评论 编辑评论


				
上一篇
下一篇