异常捕获
try...catch结构:
try {
//需要捕获的代码块
} catch (e) {
console.log(e.name + ": " + e.message);
console.log(e.stack);
}
catch代码块捕获错误之后,程序不会中断,会按照正常流程继续执行下去。
错误对象e
有三个最基本的属性:
name:错误名称
message:错误提示信息
stack:错误的堆栈(非标准属性,但是大多数平台支持)
注意,我们还可以多次使用catch语句捕获不同类型的错误或者异常。
try...catch...finally结构:
try...catch结构允许在最后添加一个finally代码块,表示不管是否出现错误,都必需在最后运行的语句。
try {
//需要捕获的代码块
} catch (e) {
console.log(e.name + ": " + e.message);
console.log(e.stack);
}finally{
//do something...
}
就算try语句里面有return语句,也要等到finally语句执行完毕再执行return语句。
JavaScript的原生错误类型
Error对象是最一般的错误类型,在它的基础上,JavaScript还定义了其他6种错误,也就是说,存在Error的6个派生对象。
1、SyntaxError //解析代码时发生的语法错误
2、ReferenceError //引用一个不存在的变量时发生的错误
3、RangeError //当一个值超出有效范围时发生的错误
4、TypeError //变量或参数不是预期类型时发生的错误
5、URIError //URI相关函数的参数不正确时抛出的错误
6、EvalError //eval函数没有被正确执行时,会抛出EvalError错误
抛出异常(throw语句)
throw语句的作用是中断程序执行,抛出一个意外或错误。它接受一个表达式作为参数,可以抛出各种值。
throw new Error("出错了!");
throw new RangeError("出错了,变量超出有效范围!");
throw new TypeError("出错了,变量类型无效!");
throw "Error!";// 抛出一个字符串
throw 42;// 抛出一个数值
throw true;// 抛出一个布尔值
throw {toString: function() { return "Error!"; } };// 抛出一个对象
JavaScript引擎一旦遇到throw语句,就会停止执行后面的语句,并将throw语句的参数值,返回给用户。
自定义错误
除了JavaScript内建的7种错误对象,还可以定义自己的错误对象。
function UserError(message) {
this.message = message || "默认信息";
this.name = "UserError";
}
UserError.prototype = new Error();
UserError.prototype.constructor = UserError;
上面代码自定义一个错误对象UserError,让它继承Error对象。然后,就可以生成这种自定义的错误了。
使用:
throw new UserError("这是自定义的错误!");
参考:
错误处理机制 -- JavaScript 标准参考教程(alpha)
http://javascript.ruanyifeng.com/grammar/error.html