错误对象的类型
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
}