Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26187403
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2010-03-17 13:06:42

Javascript异常专题

[整理时间:2010-3-17]

错误发生于两种情况:一是程序内部的逻辑或者语法错误,二是运行环境或者用户输入中不可预知的数据造成的错误。对于前者,就称之为错误(error),可 以通过调试程序来解决;而后一种则更多的称之为异常(exception),顾名思义,就是超出常规,没有按程序设计的意愿来输入数据。当然,异常还会有 许多种类型。所以说,异常并不等价于错误,相反,有时还会利用异常来解决一些问题。JavaScript可以捕获一个异常并进行相应的处理,从而避免了浏览器向用户报错。

一、使用try-catch-finally处理异常
用户可以使用该结构处理可能发生异常的代码,如果发生异常,则由catch捕获并进行处理,其语法如下:
try{
//
要执行的代码
}
catch(e){
//
处理异常的代码
}
finally{
//
无论异常发生与否,都会执行的代码
}
通过异常处理,可以避免程序停止运行,从而具有了一定的自我修复能力。

PS:这种操作与JAVA是一样的处理

 

Ajax开发中,利用异常处理的一个典型应用就是创建XMLHttpRequest对象,不同浏览器创建它的方式是不一样的,为了使代码能够跨浏览器运行,就可以利用异常,一种方法不行,再用另一种方法,直到不发生异常为止,例如:

二、使用throw语句抛出异常
JavaScript中有其内部的异常机制,在遇到非法操作时能自动抛出异常。实际的开发中,随着程序的复杂,需要能自己实现异常,这可以通过throw语句来实现:
throw value
   //直接抛出一个异常信息
其中value就是要抛出的异常变量,它可以是JavaScript中的任何一种类型。但在JavaScript内部的异常中,异常参数(即catch (e)中的e)是一个名为error的对象,可以通过new Error(message)来创建这个对象,异常的描述被作为error对象的一个属性message,可以由构造函数传入,也可以之后赋值。通过这个 异常描述message,可以让程序获取异常的详细信息,从而自动处理。

PS:在JAVA里面我们也是可以自定义异常信息出来然后直接new就可以构造出来一个异常对象出来

示例:

PS:isNaN 如果返回true表示这个变量不是数字即为字符串. 零长度字符串和 null 也会被看作数字

If isNaN(“a”)   条件为真。因为它不是数字 isNaN(null) = false

Error对象除了message属性以外,还有一些其他的属性,这些属性因浏览器而异.

例如:在IE浏览器中,error对象的属性包括name numberdescriptionmessage;而在Firefox浏览器中,error对象的属性包括messagefileName lineNumberstackname。在实际的应用中如果要实现自己的异常,这些属性只要被赋值,都是可用的,其中Firefox浏览器还会自动 stack属性赋值,用于显示异常出现的位置。

 

示例:编写自定义的错误对象。并通过手动赋值进行相关的修改

<script language="JavaScript" >

           //函数默认要求参数为数字

           function sum(a,b){

              a=parseInt(a);

              b=parseInt(b);

              //如果ab不能转换为数字则抛出一个异常对象

              if(isNaN(a) || isNaN(b)){

                  var exception=new Error();//创建出来一对象

                    exception["description"]="description";

                    exception["type"]="exception";

                    exception["number"]="120";

                    throw exception;//手工修改其属性值

              }

              return a+b;

           }

          

           try{

              //错误的调用

              var s=sum("c","d");

           }catch(e){

              //显示异常的详细信息

              alert(e.number);//得到的是一个字典类型的数据

           }

           script>

阅读(871) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~