3.4 异常处理语句
视频讲解
早期的JavaScript总会出现一些令人困惑的错误信息,为了避免类似这样的问题,在JavaScript 3.0中添加了异常处理机制,可以采用从Java语言中移植过来的模型,使用try...catch...finally、throw等语句处理代码中的异常。下面介绍JavaScript中的几个异常处理语句。
3.4.1 try...catch...finally语句
JavaScript从Java语言中引入了try...catch...finally语句。
语法如下:
try{ somestatements; }catch(exception){ somestatements; }finally{ somestatements; }
参数说明。
try:尝试执行代码的关键字。
catch:捕捉异常的关键字。
finally:最终一定会被处理的区块的关键字,该关键字和后面大括号中的语句可以省略。
说明
JavaScript语言与Java语言不同,try...catch语句只能有一个catch语句。这是由于在JavaScript语言中无法指定出现异常的类型。
例如,当在程序中输入了不正确的方法名charat时,将弹出在catch区域中设置的异常提示信息,并且最终弹出finally区域中的信息提示。程序代码如下:
01 var str = "I like JavaScript"; //定义字符串变量 02 try{ 03 document.write(str.charat(5)); //应用错误的方法名charat 04 }catch(exception){ 05 alert("运行时有异常发生"); //弹出异常提示信息 06 }finally{ 07 alert("结束try...catch...finally语句"); //弹出提示信息 08 }
由于在使用charAt()方法时将方法的大小写输入错误,所以在try区域中获取字符串中指定位置的字符将发生异常,这时将执行catch区域中的语句,弹出相应异常提示信息的对话框。运行结果如图3.19和图3.20所示。
图3.19 弹出异常提示对话框
图3.20 弹出结束语句对话框
3.4.2 Error对象
try...catch...finally语句中catch通常捕捉到的对象为Error对象,当运行JavaScript代码时,如果产生了错误或异常,JavaScript就会生成一个Error对象的实例来描述错误,该实例中包含了一些特定的错误信息。
Error对象有以下两个属性。
name:表示异常类型的字符串。
message:实际的异常信息。
例如,将异常提示信息放置在弹出的提示对话框中,其中包括异常的具体信息以及异常类型的字符串。程序代码如下:
01 var str = "I like JavaScript"; //定义字符串变量 02 try{ 03 document.write(str.charat(5)); //应用错误的方法名charat 04 }catch(exception){ 05 //弹出实际异常信息以及异常类型的字符串 06 alert("实际的错误消息为:"+exception.message+"\n错误类型字符串为:"+exception.name); 07 }
运行结果如图3.21所示。
图3.21 异常信息提示对话框
3.4.3 使用throw语句抛出异常
有些JavaScript代码并没有语法上的错误,但存在逻辑错误。对于这种错误,JavaScript是不会抛出异常的。这时,就需要创建一个Error对象的实例,并使用throw语句来抛出异常。在程序中使用throw语句可以有目的地抛出异常。
语法如下:
throw new Error("somestatements");
参数说明。
throw:抛出异常关键字。
例如,定义一个变量,值为1与0的商,此变量的结果为无穷大,即Infinity,如果希望自行检验除数为零的异常,可以使用throw语句抛出异常。程序代码如下:
01 try{ 02 var num=1/0; //定义变量并赋值 03 if(num=="Infinity"){ //如果变量num的值为Infinity 04 throw new Error("除数不可以为0"); //使用throw语句抛出异常 05 } 06 }catch(exception){ 07 alert(exception.message); //弹出实际异常信息 08 }
从程序中可以看出,当变量num为无穷大时,使用throw语句抛出异常。运行结果如图3.22所示。
图3.22 使用throw语句抛出的异常