JavaScript 异常处理

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

使用try-catch-finally处理异常
用户可以使用该结构处理可能发生异常的代码,如果发生异常,则由catch捕获并进行处理,其语法如下:
try{
       //要执行的代码
}
catch(e){
       //处理异常的代码
}
finally{
       //无论异常发生与否,都会执行的代码
}
通过异常处理,可以避免程序停止运行,从而具有了一定的自我修复能力。
在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中有其内部的异常机制,在遇到非法操作时能自动抛出异常。实际的开发中,随着程序的复杂,需要能自己实现异常,这可以通过throw语句来实现:
throw value;
其中value就是要抛出的异常变量,它可以是JavaScript中的任何一种类型。但在JavaScript内部的异常中,异常参数(即catch(e)中的e)是一个名为error的对象,可以通过new Error(message)来创建这个对象,异常的描述被作为error对象的一个属性message,可以由构造函数传入,也可以之后赋值。通过这个异常描述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语句显示了其详细信息。
image7.10.jpg
图7.10显示了异常信息的内容。


注意:使用new Error(message)创建异常对象只是一种默认的习惯,也是内置异常的实现方式。这不是必需的,完全可以抛出任意数据类型的异常,例如一个整数,来作为异常的描述。只要在程序中抛出异常和捕获异常能匹配即可。

Error对象除了message属性以外,还有一些其他的属性,这些属性因浏览器而异,例如:在IE浏览器中,error对象的属性包括name、number、description、message;而在Firefox浏览器中,error对象的属性包括message、fileName、lineNumber、stack、name。在实际的应用中如果要实现自己的异常,这些属性只要被赋值,都是可用的,其中Firefox浏览器还会自动对stack属性赋值,用于显示异常出现的位置。

转载于:https://www.cnblogs.com/dubingw2008/archive/2007/07/02/803261.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle根据年份分组

select extract(year from 时间字段 ) year from 表名 GROUP BY extract(year from 时间字段 ) 解释&#xff1a;extract(year from 时间字段) 获取相应的年份 得到的结果为数值类型的。year也可以换成month和day获取月和日 GROUP BY extract(year from 时间字段 ) 对获取的年…

Windows VS c++复制文件到网络共享文件夹的实现

远程建立好共享目录本地创建映射盘代码实现&#xff0c;调用 win32 API CopyFile() 或者命令行调用函数 sysytem&#xff08;&#xff09; 坑&#xff1a; 4. 使用 VS 调试程序的时候会提示无法找到映射盘&#xff0c; 5. CopyFile&#xff08;&#xff09;函数也会提示没有找…

做有意义的事

...现实的社会,要有现实的眼光... 在现在的生活中不公平的,不平等的事情,很多很多, 有时你是不是会想 为什么那个人什么都不行,确能进个好的公司? 为什么有能力的人, 人家确不用你哪?? ___关系. 不成认不行,人家有关系就是比你强. ___金钱. 没人家有钱,送不起礼,你就只能靠…

oracle instant client配置(MAC OS)

oracle instant client配置(MAC OS) vi ~/.bash_profileexport ORACLE_HOME/opt/oracle/instantclient_11_2/ export DYLD_LIBRARY_PATH$ORACLE_HOME export SQLPATH$ORACLE_HOME export TNS_ADMIN$ORACLE_HOME/network/admin export LANGen_US.UTF8 export NLS_LANGAMERICAN_…

对象序例化

package objectOutputStream.cn;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.ObjectInputStream;/** ObjectInputStream 对象的输入流* 构造方法&#xff1a;* ObjectInput…

Qt ftp 文件上传工具开发

一、需求&#xff1a; 1.简单的配置ftp参数界面 2.tcp 客户端端&#xff0c;接收服务器下发的参数信息 3.用户上传操作界面 在这里插入代码片 二、源码#------------------------------------------------- #------------------------------------------------- # # Project c…

微软2008系列 (Orcas + Longhorn Server+SQL2008)将于2008年2月27日发布

据John ( Windows Server Blog, com.coms news blog)&#xff0c;Windows Server 2008, Visual Studio 2008 和 Microsoft SQL Server 2008 将于2008年2月27日 "launch",希望微软不要习惯性的跳票 又据ScottGu 回复&#xff1a;One correction above - the "la…

[Err] ORA-00979: not a GROUP BY expression

not a GROUP BY expression异常产生是因为group by用法的问题。 在使用group by 时&#xff0c;有一个规则需要遵守&#xff0c;即出现在select列表中的字段&#xff0c;如果没有在组函数中&#xff0c;那么必须出现在group by 子句中。&#xff08;select中的字段不可以单独出…

python进程和线程

python 进程和线程 概念 GIL: 全局解释锁&#xff0c;解决了不同线程同时访问统一资源时&#xff0c;数据保护问题。python 虽然是多线程&#xff0c;但是因为GIL,实际上是是单线程&#xff0c;由CPU轮询&#xff0c;假线程。&#xff08;一个线程运行一段时间后会释放GIL, 另一…

arm-linux 交叉编译链接动态库使用

alientekubuntu16:~/code/256APP/App/Module256App/test$ cat build.sh arm-linux-gnueabihf-g TestModule.cpp -I ../include -L ../lib/release -L ./ libModuleSdk.so -L ./ libHalAPI.so -stdc11 -I &#xff1a;指定库的头文件目录 -L &#xff1a;指定库文件.so 所在…

2007高考:考生要根据家庭经济条件慎重填报按办学成本收费的高校及专业

2007高考&#xff1a;考生要根据家庭经济条件慎重填报按办学成本收费的高校及专业来源&#xff1a;[url]http://www.accp-teem.com.cn/ArticleView/2007-7-14/Article_View_1181.Htm[/url] 近年来&#xff0c;普通高校招生中中外合作办学的专业越来越多&#xff0c;中外合作办学…

mybatis中大于等于小于等于的写法

第一种写法&#xff08;1&#xff09;&#xff1a;原符号 < < > > & " 替换符号 < < > > &amp; &apos; &quot; 例如&#xff1a;sql如下&#xff1a; create_date…

makefile编写

多源文件 第三方库 testApp:testApp.o UdpSender.o arm-linux-gnueabihf-g -o testApp testApp.o UdpSender.o -L ./test libi2csmbus.so libads1115.so libHalAPI.so libModuleSdk.so -lpthread --stdgnu11 testApp.o: testApp.cpparm-linux-gnueabihf-g -c testApp.cpp -I…

C++习题 虚函数-计算图形面积

C习题 虚函数-计算图形面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 122 Solved: 86[Submit][Status][Web Board]Description 编写一个程序&#xff0c;定义抽象基类Shape&#xff0c;由它派生出5个派生类&#xff1a; Circle(圆形)、Square(正方形)、Rectangle(矩形…

〈理解〉OSI七层

第7层<Application应用层>—直接对应用程序提供服务&#xff0c;应用程序可以变化&#xff0c;但要包括电子消息传输第6层<Presentation表示层>—格式化数据&#xff0c;以便为应用程序提供通用接口。这可以包括加密服务、解压第5层<Session会话层>—在两个节…

Ubuntu 开机 Firmware Bug , Bios corrupted

因为Windows 死机&#xff0c;断电后 vmware 虚拟机开机后、进入ubuntu 出现linux启动选项 进入后界面无法打开 一直是命令输入行 解决方法 输入命令&#xff1a;fsck -y /dev/sda1 等待完成修复后再输入 exit

Vboxmanage改动uuid报错的解决的方法

我的环境&#xff1a; Virtualbox 4.3.10 r93012 操作系统&#xff1a;win7 问题&#xff1a;Virtualbox在使用拷贝的虚拟盘时会提示uuid冲突&#xff1a; Because a hard disk with uuid ‘’ already exists. 依照网上的说法&#xff0c;执行VBoxManage改动uuid报错&#xff…

SQL Server连接中的常见错误

SQL Server连接中的常见错误:一."SQL Server 不存在或访问被拒绝"这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.一般说来,有以下几种可能性:1,SQL Server名称或IP地址拼写有误2,服务器端网络配置有误3,客户端网络配置有误要解决这个问题,我们一般要遵…

QT源码交叉编译

交叉编译QT 源码 板子&#xff1a;全志 V3S , arm32位cpu ubuntu 虚拟机搭建好交叉编译链环境&#xff0c;添加环境变量 ok3399ubuntu:~$ echo $PATH /opt/OK3399-linux-release/host/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lo…