try...catch 语句.
1. nested try...catch语句.
使用场景: 在try...catch语句中的catch子句中,也会发生错误,此时,就可以使用嵌套try...catch语句。
eg:
<script type="text/javascript"> try{ eval("a ++ b"); }catch(oException){ alert("An Exception occurred."); try{ var aErrors = new Arrary(100000000000000000000000); aErrors.push(exception); }catch(oException2){ alert("Another exception occurred."); } }finally{ alert("all done!"); } </script>
Error 对象
类似于java有个可用于抛出的基类Exception, javascript有个Error基类用于抛出, Error有以下特性:
name----表示错误类型的字符串
message----实际的错误信息
eg:
<script type="text/javascript"> try{ window.nonExistenFunction(); alert("Method completed!"); }catch(oException){ alert("An exception occurred: "+oException.message); }finally{ alert("End of try...catch test."); } </script>
判断错误类型
尽管每个try...catch语句只能有一个catch子句,但判断抛出的错误的类型的方法却有几种。
第一种方法是使用Error对象的name特性
eg:
try{ eval("a ++ b"); }catch(oError){ if(oError.name=='SyntaxError'){ alert("Syntax Error: "+oError.message); }else{ alert("An unexception error occurred: " + oError.message); } }
第二种方法是使用instanceof操作符,并使用不同错误的类名
eg:
try{ eval("a ++ b"); }catch(oError){ if(oError instanceof SyntaxError){ alert("Syntax Error: "+oError.message); }else{ alert("An unexception error occurred: " + oError.message); } }
抛出异常
ECMAScript 第三版还引入了throw语句,用于有目的地抛出异常:throw error_object;
error_object 可以是字符串,数字,布尔值或者是实际对象,也可抛出一个Error对象。
实际的说,正常的执行不能继续时,应该抛出一个异常
eg:
function addTwoNumbers(a,b){ if(arguments.length < 2){ throw new Error("Two numbers are required."); }else{ return a+b; } } try{ result = addTwoNumbers(90); }catch(oError){ alert(oError.message); }
web browser不生成Error对象(它总生成一个较精确的Error对象),所以使用前面的技术就可以区分web browser抛出的错误和开发人员抛出的错误
eg:
function addTwoNumbers(a,b){ if(arguments.length < 2){ throw new Error("Two numbers are required."); }else{ return a+b; } } try{ result = addTwoNumbers(90,parseInt(z)); }catch(oError){ if(oError instanceof SyntaxError){ alert("Syntax Error: "+oError.message); }else if(oError instanceof Error){ alert(oError.message); } }
注意: instanceof Error必须是if语句中最后一个条件,因为所有其他的错误类都继承于它.