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
