4.6 异常处理语句
在JavaScript中,可以对产生的异常进行处理。所谓异常是指在程序中产生了某些异常情况或错误。处理这些异常情况或错误所使用的语句,就是异常处理语句。在JavaScript中的异常处理语句包括throw语句与try...catch...finally语句两种。
4.6.1 throw语句
throw(抛出)语句的作用是抛出一个异常。所谓的抛出异常,就是用信号通知发生了异常情况或错误。throw语句的语法代码如下所示:
throw 表达式
以上代码中的表达式,可以是任何类型的表达式。该表达式通常是一个Error对象或Error对象的某个实例。
【实例4.17】有关throw语句的使用方法请看以下代码,注意加粗的文字:
01 <html> 02 <head> 03 <title>throw语句</title> 04 <script type="text/javascript"> 05 <!-- 06 function myFun(x,y) 07 { 08 if (y==0) 09 { 10 throw new Error("除数不能为0"); 11 } 12 return x/y; 13 } 14 myFun(1,0); 15 --> 16 </script> 17 </head> 18 <body> 19 </body> 20 </html>
【代码说明】在本例中,第6行定义了一个名为“myFun”的函数,该函数的作用是返回两个参数相除后的结果。由于除数不能为0,所以在函数体中,如果检测到除数为0,就用throw语句抛出异常。
【运行效果】以上代码为本书配套代码文件目录“代码\第04章\sample17.htm”里的内容。运行结果如图4.15所示。
4.6.2 try...catch...finally语句
try...catch...finally语句是JavaScript中的用于处理异常的语句,该语句与throw语句不同。throw语句只是抛出一个异常,但对该异常并不进行处理,而try...catch...finally语句可以处理所抛出的异常。try...catch...finally语句的语法代码如下所示:
try <语句块1> catch(e) <语句块2> finally <语句块3>
以上代码的解释如下:
■<语句块1>是有可能要抛出异常的语句块。
■catch(e)中的e,是一个变量,该变量为从try语句块中抛出的Error对象或其他值。
■<语句块2>是处理异常的语句块。如果在<语句块1>中没有抛出异常,则不执行该语句块中的语句。
■无论在<语句块1>中是否抛出异常,JavaScript都会执行<语句块3>中的语句。<语句块3>中的语句与finally关键字可以一起省略。
【实例4.18】有关try...catch...finally语句的使用方法请看以下代码,注意加粗的文字:
01 <html> 02 <head> 03 <title>try...catch...finally语句</title> 04 <script type="text/javascript"> 05 <!-- 06 function myFun() 07 { 08 try 09 { 10 document.write("函数开始执行<br>"); 11 //调用了一个不存在的函数 12 alerta("这是一个错误的函数名"); 13 document.write("函数正在执行"); 14 } 15 catch(ex) 16 { 17 document.write(ex.message + "<br>"); 18 } 19 finally 20 { 21 document.write("函数执行完毕"); 22 } 23 } 24 myFun(); 25 --> 26 </script> 27 </head> 28 <body> 29 </body> 30 </html>
【代码说明】在本例中,代码6~23行定义了一个名为“myFun”的函数,然后调用该函数,该函数的运行过程如下所示:
(1)执行try后的语句块。
(2)执行“document.write("函数开始执行<br>");”语句,输出一行文字,如图4.16中的第一行文字。
(3)调用了一个不存在的函数“alerta()”,此时抛出异常。
(4)忽略try语句块中的产生异常之后的所有语句,本例中忽略了“document.write ("函数正在执行");”,因此在图4.16中并没有输出该文字。
(5)JavaScript用catch语句捕捉到抛出的异常,并赋值给变量ex。
(6)执行“document.write(ex.description + "<br>");”语句。
(7)执行“document.write("函数执行完毕");”。
【运行效果】以上代码为本书配套代码文件目录“代码\第04章\sample18.htm”里的内容,其运行结果如图4.16所示。
4.6.3 异常处理语句的综合应用
try...catch...finally语句不仅可以接收到JavaScript抛出的异常,还可以接收到throw语句所抛出的异常。因此可以通过try...catch...finally语句与throw语句相结合来达到处理异常的目的。
【实例4.19】请看以下代码,注意加粗的文字:
01 <html> 02 <head> 03 <title>异常处理语句的综合应用</title> 04 <script type="text/javascript"> 05 <!-- 06 function myFun(x,y) 07 { 08 var z; 09 try 10 { 11 if (y==0) 12 { 13 throw new Error("除数不能为0"); 14 } 15 z = x/y; 16 } 17 catch(ex) 18 { 19 z = ex.message; 20 } 21 return z; 22 } 23 document.write(myFun(1,0)); 24 --> 25 </script> 26 </head> 27 <body> 28 </body> 29 </html>
【代码说明】在本例中,创建了一个名为“myFun”的函数,该函数的作用是将两个参数相除,并返回结果,如果在相除时产生异常,则返回错误信息。在本例中,catch语句可以接收到由throw语句抛出的异常,并进行处理。此时,在IE浏览器的左下角不会再出现错误信息。
【运行效果】以上代码为本书配套代码文件目录“代码\第04章\sample19.htm”里的内容,其运行结果如图4.17所示。