JS中的Error对象

错误对象的类型

Error: 所有错误类型的父类型

SyntaxError: 语法错误,表示程序的语法使用错误

console.log(" "" ") ;     // SyntaxError: Unexpected string

ReferenceError: 引用错误,表示引用的变量不存在

console.log(a) ;     // ReferenceError: a is not defined

TypeError: 类型错误,表示使用了错误的数据类型

let a;
console.log(a.name);     // TypeError: Cannot read property 'name' of undefined

RangeError:范围错误, 数据值不在其所允许的范围内(函数递归调用容易出现此错误)

// 保留小数点多少位
(10.24).toFixed(-1);  // toFixed() digits argument must be between 0 and 100

URIError: URI错误,向全局 URI 处理函数(decodeURI、decodeURIComponent)传递一个不合法的URI时,URIError 错误会被抛出

// 解码URI地址   错误:格式不正确
console.log(decodeURI("%") );   // URIError: URI malformed

EvelError: eval函数执行错误
EvalError 不在当前ECMAScript规范中使用,因此不会被运行时抛出。但是对象本身仍然与规范的早期版本向后兼容

以上都是不同错误类型的 Error构造函数,能通过new 创建错误对象

错误处理

捕获错误 try...catch
try {
  // 正常书写的程序代码(可能会出错的代码)
} catch (err) { // err: try中执行语句发生错误时,自动创建err错误对象,并将错误信息保存在对象err中
  // 执行错误处理
} finally { // 无论是否出错,最终都会执行的代码
  // 一般用于释放资源
  // finally 可有可无,因为try...catch之后的代码本来就会执行
}

放在try...catch中的代码,执行效率会降低

  • 尽量少的将代码放入try...catch中
  • 如果可提前预知错误原因,可用 if...else 代替,提前预防错误
抛出错误 throw error

通过 throw , 主动抛出异常错误

throw new Error("错误信息");

错误对象的属性

name 属性

错误类型

message 属性

错误相关的描述信息

stack 属性

函数调用栈记录信息(错误相关信息、错误出现的位置)

try {
  console.log(a);
} catch (e) {
  console.log(e.name);    // ReferenceError
  console.log(e.message);  // a is not defined
}

推荐阅读更多精彩内容