JavaScript从入门到精通(微视频精编版)
上QQ阅读APP看书,第一时间看更新

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语句抛出的异常