Ext教程 arrow JavaScript技术 arrow Javascript异常处理
 
     
Javascript异常处理
  2008-05-06
在代码的运行过程中,错误是不可避免的,总的来说,错误发生于两种情况:
一是程序内部的逻辑或者语法错误;
二是运行环境或者用户输入中不可预知的数据造成的错误.
对于前者,就称之为错误(error),可以通过调试程序来解决;而后一种则更多的称之为异常
(exception),顾名思义,就是超出常规,没有按程序设计的意愿来输入数据.当然,异常
还会有许多种类型.
所以说,异常并不等价于错误,相反,有时还会利用异常来解决一些问题.
JavaScript可以捕获一个异常并进行相应的处理,从而避免了浏览器向用户报错.用户可以使用该结构处理可能发生异常的代码,如果发生异常,则由catch捕获并进行
处理,其语法如下:
try{
//要执行的代码
}
catch(e){
//处理异常的代码
}
finally{
//无论异常发生与否,都会执行的代码
}

这和Java 或者C#的异常处理的语言是一致的.通过异常处理,可以避免程序停止运
行,从而具有了一定的自我修复能力.
在Ajax 开发中,利用异常处理的一个典型应用就是创建XMLHttpRequest 对象,不同
浏览器创建它的方式是不一样的,为了使代码能够跨浏览器运行,就可以利用异常,一种方
法不行,再用另一种方法,直到不发生异常为止,例如:
<script language="JavaScript" type="text/javascript">
<!--
var xmlhttp;
try{
//尝试用IE的方式创建XMLHttpRequest对象
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
try{
//尝试用非IE的方式常见XMLHttpRequest对象
xmlhttp=new XMLHttpRequest();
}catch(e){}
}
//-->
</script>

通过这种方式,就可以跨浏览器创建XMLHttpRequest 对象.注意,即使不在catch 块
内进行处理,catch标识及其参数e也是必须写的,否则会产生语法错误.而finnally则不是
必需的.
使用throw语句抛出异常
在JavaScript中有其内部的异常机制,在遇到非法操作时能自动抛出异常;后面讲到的
DOM模型标准中的一些方法也能够产生异常.但在实际的开发中,随着程序的复杂,需要
能自己实现异常,这可以通过throw语句来实现:
throw value;
其中value 就是要抛出的异常变量,它可以是JavaScript 中的任何一种类型.但在
JavaScript内部的异常中,异常参数(即catch(e)中的e)是一个名为error 的对象,可以通过
new Error(message)来创建这个对象,异常的描述被作为error 对象的一个属性message,可
以由构造函数传入,也可以之后赋值.通过这个异常描述,可以让程序获取异常的详细信息,
从而自动处理.
例如,下面的程序计算两个数据的和,如果参数不是数字,则抛出异常:
<script language="JavaScript" type="text/javascript">
<!--
//函数默认要求参数为数字
function sum(a,b){
a=parseInt(a);
b=parseInt(b);
//如果a或b不能转换为数字则抛出一个异常对象
if(isNaN(a) || isNaN(b)){
throw new Error("arguments are not numbers");
}
return a+b;
}
try{
//错误的调用
var s=sum("c","d");
}catch(e){
//显示异常的详细信息
alert(e.message);
}
//-->
</script>

程序中使用字母作为参数传递给sum 函数,是错误的,所以函数内抛出了一个异常对
象,这个对象被catch 语句获取,并使用alert 语句显示了其详细信息.
注意:使用new Error(message)创建异常对象只是一种默认的习惯,也是内置异常的实现方式.但这并不
是必需的,完全可以抛出任意数据类型的异常,例如一个整数,来作为异常的描述.只要在程序
中抛出异常和捕获异常能匹配即可.
Error 对象除了message 属性以外,还有一些其他的属性,但这些属性因浏览器而异,
例如:在IE 中,error 对象具有的属性包括name,number,description,message;而在Firefox
中,error 对象具有的属性包括message,fileName,lineNumber,stack,name.在实际的应
用中如果要实现自己的异常,这些属性只要被赋值,都是可用的,其中Firefox 还会自动对stack属性赋值,用于显示异常出现的位置.
---------
文章来源 Happy漫步者花园
http://www.txdnet.cn/ShowEssay-2-1592-Txdnet.jsp
< 上一篇   下一篇 >
   
 
 
 
Copyright Infotmation overhere. | designed by Magicbox from Mambochina
曼波整站系统 基于 Mambo 开发,是免费的自由软件,遵循 GNU/GPL 开源许可协议。
曼波整站系统5.4.0Mambo中国Mambo Resource 联合增强开发。  闽ICP备08005204号