错误类型
Error实例对象、原生错误类型、自定义错误。
错误类型详解
1.error实例对象
JavaScript 解析或运行时,一旦发生错误,引擎就会抛出一个错误对象。JavaScript 原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例。
2.原生错误类型
1.SyntaxError 对象 语法
2.ReferenceError 对象 引用一个不存在的变量时发生的错误或将一个值分配给无法分配的对象
eg:`// 等号左侧不是变量
console.log() = 1`
// this 对象不能手动赋值
this = 1
3.RangeError 对象 一个值超出有效范围
4.TypeError 对象 对象是变量或参数不是预期类型
5.URIError 对象 URI 相关函数的参数不正确时
6.EvalError 对象 eval函数没有被正确执行时
自定义错误类型
function ownError(mes){
this.mes=message||'自定义异常'
}
ownError.prototype=new Error();
ownError.prototype.constructor=ownError;
异常捕获
1.Throw
throw可以抛出任何类型的值,程序遇到throw后就会终止。
2.try…catch
确保程序能够正常执行。对错误进行处理,选择是否往下执行。
try{throw new Error('抛出错误');}catch(e){console.log(e.name);console.log(e.stack);}
捕获不同类型的错误
try {
foo.bar();
} catch (e) {
if (e instanceof EvalError) {
console.log(e.name + ": " + e.message);
} else if (e instanceof RangeError) {
console.log(e.name + ": " + e.message);
}
// ...
}
3.finally代码块
不管是否出现错误,都必需在最后运行的语句。
function idle(x) {
try {
console.log(x);
return 'result';
} finally {
console.log("FINALLY");
}
}
idle('hello')
// hello
// FINALLY
// "result"
var count = 0;
function countUp() {
try {
return count;
} finally {
count++;
}
}
countUp()
// 0
count
// 1
如果写出
finally 子句,catch 块就成了可选的.
详情见js红皮第21章21.2