Error
Error
是最基本的错误类型,其他的错误类型都继承自该类型。Error
对象主要有两个重要属性 message
和 name
分别表示错误信息和错误名称。
Error
类型一般都是开发人员自己抛出的异常。
try { throw new Error('抛出的异常'); } catch (error) { console.log(error); }
SyntaxError – 语法错误
语法错误在任何编程语言中都是最常见的错误类型,表示不符合编程语言的语法规范。
此类异常发生在 JavaScript
解析/编译时,此类异常一旦发生,导致整个js文件都无法执行。
TypeError – 类型错误
表示变量或参数不是预期类型
ReferenceError – 引用错误
引用一个不存在的变量时发生的错误。
调用它不存在的属性只会是未定义状态,也就是 undefined
。
RangeError – 边界错误
表示超出有效范围时发生的异常,主要的有以下几种情况:
- 数组长度为负数或超长
- 数字类型的方法参数超出预定义范围
- 函数堆栈调用超过最大值
URIError – URL 错误
在调用 URI
相关的方法中 URL
无效时抛出的异常,主要包括 encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()
几个函数。
EvalError
表示错误的原因:与 eval()
有关。
自定义异常
class UnAuthError extends Error { } class ParamError extends Error { } function controller() { throw new UnAuthError(); } try { controller(); } catch (error) { if (error instanceof UnAuthError) { return '无权限'; } if (error instanceof ParamError) { return '参数错误'; } }
判断错误类型
try {
foo.bar();
} catch (e) {
if (e instanceof EvalError) {
alert(e.name + ": " + e.message);
} else if (e instanceof RangeError) {
alert(e.name + ": " + e.message);
}
}
参考:
词汇:
instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。
// 定义构造函数 function C(){} function D(){} var o = new C(); o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype o instanceof D; // false,因为 D.prototype 不在 o 的原型链 o instanceof Object; // true,因为 Object.prototype.isPrototypeOf(o) 返回 true