
error
error 对象
Error本身作为函数直接调用和被 new 调用的效果是一样的
1 2 3 4
| const a = Error('a')
const b = new Error('b')
|
javascript 规范中总共有 8 中错误类型构造函数
- Error – 错误对象
- SyntaxError –解析过程语法错误(上面提到的编译时异常)
- TypeError – 不属于有效类型(上面举例的运行时异常)
- ReferenceError – 无效引用(严格模式下直接访问一个未定义的变量)
- RangeError – 数值超出有效范围
- URIError – 解析 URI 编码出错
- EvalError – 调用 eval 函数错误
- InternalError – Javascript 引擎内部错误的异常抛出, “递归太多”
Error 是错误的基类,其他类型都继承 Error 这个类
1 2 3 4 5 6 7 8 9 10 11 12
| console.log(Object.getPrototypeOf(SyntaxError) === Error);
console.log(Object.getPrototypeOf(TypeError) === Error);
console.log(Object.getPrototypeOf(ReferenceError) === Error);
console.log(Object.getPrototypeOf(RangeError) === Error);
console.log(Object.getPrototypeOf(URIError) === Error);
console.log(Object.getPrototypeOf(EvalError) === Error);
|
默认的 error 对象只有一个 message 信息,很多时候对于错误的细分是很不好使,一般可以通过扩展这个错误对象,抛异常时抛出自定义的错误对象,在异常处理或时实现更精细化的处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class ApiError extends Error {
constructor(message, code) {
super(message);
this.code = code
}
}
const err = new ApiError('xxx', 404)
err instanceof ApiError
|
一种常见的应用就是在 axios 处理的异常中抛出一个扩展的 ApiError 对象,传递错误信息、错误等,在错误处理时对于这种错误进行特殊处理。如自定义上报、catch 住不作为 js 异常上报。
抛出error