js笔记——js异常处理

@date:2016-01-09 22:20:00

异常捕获 #

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

Build by Loppo 0.6.14