1、Error实例对象
js一旦发生错误都是Error构造函数的实例
var e = new Error(“这是一个错误”);
e.message;
Error实例有message(错误描述)属性。name(错误名称)和stack(错误堆栈信息)属性为非标准属性。
2、原生错误类型
Error是一般错误类型,js还定义了其余6种错误对象,也是其派生对象。
2.1、syntaxError对象
解析代码时发生的语法错误
2.2、RefrenceError对象
引用一个不存在的变量时发生的错误;
var f ;
f();
2.3、RangeError对象
超出有效范围发生的错误,一是数组越界,二是Number对象的方法超出范围
2.4、TypeError
变量或者参数不是预期类型时发生的错误。
2.5、URIError对象
URIError对象是 URI 相关函数的参数不正确时抛出的错误,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数。
2.6、EvalError对象
2.7、总结
以上错误信息都是构造函数,可以使用他们,手动生成出无对象的实例。这些构造函数都接受一个参数,代表错误信息。
3、自定义错误
function UserError(message) {
this.message = message || '默认信息';
this.name = 'UserError';
}
UserError.prototype = new Error();
UserError.prototype.constructor = UserError;
new UserError('这是自定义的错误!');
4、Throw语句
手动中断程序执行,抛出一个错误,可以抛出Error,也可以抛出任意值。遇到throw语句程序就终止了。
5、try…catch结构
允许对错误进行处理,选择是否往下走。
6、finally代码块
try…catch不管有没有错误,都必须在最后运行的代码块。
如果try中出错了,会先停止执行,执行catch中的代码,然后执行finally中的代码块,然后再执行错误语句打印等。
如果try中有return语句,也会先执行finally里的语句,然后在return try语句中的值。
function f() {
try {
console.log(0);
throw 'bug';
} catch(e) {
console.log(1);
return true; // 这句原本会延迟到 finally 代码块结束再执行
console.log(2); // 不会运行
} finally {
console.log(3);
return false; // 这句会覆盖掉前面那句 return
console.log(4); // 不会运行
}
console.log(5); // 不会运行
}
var result = f();
// 0
// 1
// 3
result
// false