常见错误类型
- Error
- EvalError:eval函数的错误
- InternalError(非标准):出现在JavaScript引擎内部的错误
- RangeError:范围错误,当一个值不在其所允许的范围或者集合中
- ReferenceError:引用错误,当一个不存在的变量被引用时发生的错误
- SyntaxError:语法错误
- TypeError:类型错误
- URIError:URI错误
Error
我们先来看看Error.prototype里面有哪些东西:
Error是基类型,其他类型的错误类型都是继承该类型,所以所有的错误类型共享了一套相同的属性;
EvalError.prototype.__proto__ === Error.prototype; // true
RangeError.prototype.__proto__ === Error.prototype; // true
ReferenceError.prototype.__proto__ === Error.prototype; // true
SyntaxError.prototype.__proto__ === Error.prototype; // true
TypeError.prototype.__proto__ === Error.prototype; // true
URIError.prototype.__proto__ === Error.prototype; // true
但Error错误类型很少见,主要用于开发者自定义错误。
自定义异常类型:
function MyError (message) {
this.name = 'MyError';
this.message = message || 'Default Message';
this.stack = (new Error()).stack;
}
MyError.prototype = Object.create(Error.prototype);
MyError.prototype.constructor = MyError;
try {
throw new MyError();
} catch (e) {
console.log(e.name); // 'MyError'
console.log(e.message); // 'Default Message'
}
EvalError
在ES5以下的Javascript中,当eval函数没有被正确执行时就会抛出evalError错误
如:
var myEval = eval;
myEval("alert('call eval')");
但ES5以上的JavaScript中已经不再抛出该错误,但依然可以通过new关键字来自定义该类型的错误提示。
RangeError
当一个值超出有效范围时发生的错误。
1. 数组长度为负数
2. 将值传递给超出范围的函数,此类函数包括toFixed、toExponential、toPrecision等
3. 函数堆栈超过最大值
ReferenceError
引用错误
1. 引用了一个不存在的变量
2. 将一个值赋值给一个无法被赋值的对象
SyntaxError
语法错误
1. 变量名不合规范
2. 给关键字赋值
3. 缺少'"}等
4. JSON.parse解析内容不合法
TypeError
1. 访问未定义对象中的属性或方法时:
2. TypeError: "undefined"不是对象 "null"不是对象
这错误发生在safari上
3. TypeError: 对象不支持xx属性或方法
这是在IE上发生的错误
4. TypeError:"xxx" 不是函数
URIError
URI错误,主要是相关函数的参数不正确。
主要设计encodeURI、decodeURI、encodeURIComponent、decodeURIComponent、escape、unescape这些函数中
参考资料:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Error