错误与异常
错误与异常的概念
错误,指程序中的非正常运行状态,在其他编程语言中称为“异常”或“错误”。解释器会为每个错误情形创建并跑车一个Error对象,其中包含错误的描述信息。
通过使用JavaScript提供的异常处理语句,可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离。
错误 与异常处理在应用中的重要性是毋庸置疑的。任何有影响力的web应用都需要一套完善的错误处理机制。
try…catch语句
try…catch语句作为JavaScript中处理异常的一种标准方式。try语句标记一块待尝试的语句,如果该语句出现错误,则通过catch语句进行捕获。基本语法如下:
try{
//可能导致错误的代码
}catch(error){
//在错误发生时的处理
}
try…catch 语句有一个包含一条或者多条语句的try代码块,0个或或多个的catch代码块,catch代码块中的语句会在try代码块中抛出异常时执行。换句话说,如果你在try代码块中的代码没有执行成功,那么你希望将执行流程转入catch代码块,如果try代码中的语句(或者try代码块中的调用的方法)一旦抛出了异常,那么执行流程会立即进入catch代码块。如果tr代码块没有抛出异常,catch代码就回被跳过,finally代码块总会紧跟在try和catch代码块之后执行,但会在try和catch代码之后的其他代码之前执行。
throw语句
使用throw语句抛出一个异常,当你抛出一个异常,你规定一个含有值得表达式要被抛出。
throw expression;
你可以抛出任意表达式而不是特定一种类型的表达式。
throw "Error"; //String type
throw 42;//Number type
throw true; //Boolean type
throw {toString:function(){return"I'm an object!";}};
注意:你可以在抛出异常时声明一个对象,那你就可以在catch块中查询到对象的属性。
捕捉块
可以使用捕捉块来处理所有可能在try代码块中产生的异常。
catch(catchID){
statements
}
- 捕捉块指定了一个标识符(上述语句中的catchID)来存放抛出语句指定的值。
- 可以用这个标识符来获取抛出的异常信息。
终结块
终结块包含了在try和catch块完成后,下面接着的语句之前执行的语句。终结块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,终结块里的语句也会执行。
try{
console.log(0);
}catch(error){
console.log(1);
}finally{
console.log(3);
}
嵌套try…catch语句
可以嵌套一个或多个try…catch 语句。如果一个内部的try…catch语句没有捕捉块,将会启动匹配外部的try…catch语句的捕捉块。
基本错误类型
执行代码期间可能会发生的错误有多种类型,每种错误又有对应得错误类型。当错误发生时,就会抛出对应类型的错误对象。
Error是基本错误类型,其他错误类型都继承自该类型。Error类型的错误很少见,如果有也是浏览器抛出的。这个基本错误类型的主要目的是提供给开发人员抛出自定义错误的。
预定义错误类型
除了基本错误类型之外,JavaScript还提供了7种预定义的错误类型:
错误类型 | 说明 |
---|---|
EvalError | 表示错误的原因:与eval()有关 |
InternalError | 表示JavaScript引擎内部错误的异常 |
RangeError | 表示错误的原因:数值变量或参数超出其有效范围 |
SyntaxError | 表示错误的原因:无效引用 |
TypeError | 表示错误的原因:eval()在解析代码的过程中发生的语法错误 |
URIError | 表示错误的原因:变量或参数不属于有效类型 |
ReferenceError | 表示错误的原因:给encodeURI()或decodeURI()传递的参数无效 |