javascript错误处理(2)

javascript错误处理(2)

try...catch 语句.

 1. nested try...catch语句.

    使用场景: 在try...catch语句中的catch子句中,也会发生错误,此时,就可以使用嵌套try...catch语句。

 eg:

Js代码 复制代码
  1. <script type="text/javascript">   
  2.         try{   
  3.             eval("a ++ b");   
  4.         }catch(oException){   
  5.             alert("An Exception occurred.");   
  6.             try{   
  7.                 var aErrors = new Arrary(100000000000000000000000);   
  8.                 aErrors.push(exception);   
  9.             }catch(oException2){   
  10.                 alert("Another exception occurred.");   
  11.             }   
  12.         }finally{   
  13.             alert("all done!");    
  14.         }              
  15. </script>  

 

Error 对象

类似于java有个可用于抛出的基类Exception, javascript有个Error基类用于抛出, Error有以下特性:

name----表示错误类型的字符串

message----实际的错误信息

eg:

Js代码 复制代码
  1. <script type="text/javascript">   
  2.     try{   
  3.         window.nonExistenFunction();   
  4.         alert("Method completed!");   
  5.     }catch(oException){   
  6.         alert("An exception occurred: "+oException.message);   
  7.     }finally{   
  8.         alert("End of try...catch test.");   
  9.     }          
  10. </script>  

 

判断错误类型

尽管每个try...catch语句只能有一个catch子句,但判断抛出的错误的类型的方法却有几种。

第一种方法是使用Error对象的name特性

eg:

Js代码 复制代码
  1. try{   
  2.     eval("a ++ b");   
  3. }catch(oError){   
  4.     if(oError.name=='SyntaxError'){   
  5.         alert("Syntax Error: "+oError.message);   
  6.     }else{   
  7.         alert("An unexception error occurred: " + oError.message);   
  8.     }   
  9. }  

 

第二种方法是使用instanceof操作符,并使用不同错误的类名

eg:

Js代码 复制代码
  1. try{   
  2.     eval("a ++ b");   
  3. }catch(oError){   
  4.     if(oError instanceof SyntaxError){   
  5.         alert("Syntax Error: "+oError.message);   
  6.     }else{   
  7.         alert("An unexception error occurred: " + oError.message);   
  8.     }   
  9. }  

 

 

抛出异常

ECMAScript 第三版还引入了throw语句,用于有目的地抛出异常:throw error_object;

error_object 可以是字符串,数字,布尔值或者是实际对象,也可抛出一个Error对象。

实际的说,正常的执行不能继续时,应该抛出一个异常

eg:

Js代码 复制代码
  1. function addTwoNumbers(a,b){   
  2.     if(arguments.length < 2){   
  3.         throw new Error("Two numbers are required.");   
  4.     }else{   
  5.         return a+b;   
  6.     }   
  7. }   
  8.   
  9. try{   
  10.     result =    addTwoNumbers(90);   
  11. }catch(oError){   
  12.     alert(oError.message);   
  13. }  

 

web browser不生成Error对象(它总生成一个较精确的Error对象),所以使用前面的技术就可以区分web browser抛出的错误和开发人员抛出的错误

eg:

Js代码 复制代码
  1. function addTwoNumbers(a,b){   
  2.     if(arguments.length < 2){   
  3.         throw new Error("Two numbers are required.");   
  4.     }else{   
  5.         return a+b;   
  6.     }   
  7. }   
  8.   
  9. try{   
  10.     result =    addTwoNumbers(90,parseInt(z));   
  11. }catch(oError){   
  12.     if(oError instanceof SyntaxError){   
  13.         alert("Syntax Error: "+oError.message);   
  14.     }else if(oError instanceof Error){   
  15.         alert(oError.message);   
  16.     }   
  17. }  

注意: instanceof Error必须是if语句中最后一个条件,因为所有其他的错误类都继承于它.

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值