JavaScript异常处理
在代码的运行过程中,错误是不可避免的,总的来说,错误发生于两种情况:一是程序内部的逻辑或者语法错误,二是运行环境或者用户输入中不可预知的数据造成的错误。对于前者,就称之为错误(error),可以通过调试程序来解决;而后一种则更多的称之为异常(exception),顾名思义,就是超出常规,没有按程序设计的意愿来输入数据。当然,异常还会有许多种类型。
使用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则不是必须的。
在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语句显示了其详细信息。
注意:使用new Error(message)创建异常对象只是一种默认的习惯,也是内置异常的实现方式。这不是必需的,完全可以抛出任意数据类型的异常,例如一个整数,来作为异常的描述。只要在程序中抛出异常和捕获异常能匹配即可。
Error对象除了message属性以外,还有一些其他的属性,这些属性因浏览器而异,例如:在IE浏览器中,error对象的属性包括name、number、description、message;而在Firefox浏览器中,error对象的属性包括message、fileName、lineNumber、stack、name。在实际的应用中如果要实现自己的异常,这些属性只要被赋值,都是可用的,其中Firefox浏览器还会自动对stack属性赋值,用于显示异常出现的位置。
JavaScript异常处理的更多相关文章
- Atititjs javascript异常处理机制与java异常的转换.js exception process
Atititjs javascript异常处理机制与java异常的转换.js exception process 1. javascript异常处理机制 Throw str Not throw err ...
- Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7
Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception processVob7 1. 1. javascript异常处理机制 ...
- Atitit.js javascript异常处理机制与java异常的转换.js exception process Voae
Atitit.js javascript异常处理机制与java异常的转换.js exception processVoae 1. 1. javascript异常处理机制 1 2. 2. Web前后台异 ...
- Atititjs javascript异常处理机制java异常转换.js exception process
Atititjs javascript异常处理机制java异常的转换.js exception process 1. javascript异常处理机制 Throw str Not throw erro ...
- javascript 异常处理和事件处理
异常捕获 1.异常:当javascript引擎执行JS代码时,发生了错误,导致程序停止运行. 2.异常抛出:当异常产生,并且将这个异常生成一个错误信息 3.异常捕获: try{发生异常的代码块:}ca ...
- JavaScript异常处理和事件处理
异常捕获 1.异常: 当JavaScript引擎执行JavaScript代码时,发生了错误,导致程序停止运行 2.异常抛出: 当异常产生,并且将这个异常生成一个错误信息 3.异常捕 ...
- javascript异常处理。 屏蔽异常
http://www.cnblogs.com/aqbyygyyga/archive/2011/10/29/2228824.html
- javascript 异常处理
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- JavaScript 中的异常处理
考虑到 JS 中的错误可比服务器端的代码产生的错误要多得多,并且还难以发现及修正,所以 JS 代码必须有异常处理以及全局一场处理. try { //这段代码从上往下运行,其中任何一个语句抛出异常该代码 ...
随机推荐
- Ubuntu环境下配置GCC
Ubuntu网络环境下安装GCC及其头文件步骤: 1.Ubuntu环境下配置GCC 刚装好的GCC什么都不能编译,因为没有一些必须的头文件,所以要安装build-essential,安装了这个包会安装 ...
- MS Sql Server 中主从库的配置和使用介绍
网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库. 主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据 ...
- 海思hi3518 opencv测试
2.4.9的opencv 安装好交叉编译后,用Cmake 配置opencv 修改CMakeCache.txtCMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt - ...
- 惠普HP compaq康柏系列 CQ40笔记本电脑拆机除尘
工具:两用螺丝刀(一字口的拆CPU,十字口的拆其它所有螺丝) 散热硅胶和CPU上的散热贴 正面照(A面) 反面照(D面) 第一步:拆掉电池,不要忘记了红圈这里的两颗螺丝.共6颗小螺丝. 第二步: ...
- BZOJ 2179 FFT快速傅立叶 题解
bzoj 2179 Description 给出两个n位10进制整数x和y,你需要计算x*y. [题目分析] 高精裸题.练手. [代码] 1.手动高精 #include<cstdio> # ...
- mybatis连接mysql数据库插入中文乱码
对于MySQL数据库的乱码问题,有两种情况: 1. mysql数据库编码问题(建库时设定). 2. 连接mysql数据库的url编码设置问题. 对于第一个问题,目前个人发现只能通过重新建库解决,建库的 ...
- Reservoir Sampling - 蓄水池抽样算法&&及相关等概率问题
蓄水池抽样——<编程珠玑>读书笔记 382. Linked List Random Node 398. Random Pick Index 从n个数中随机选取m个 等概率随机函数面试题总结 ...
- 主题 Theme 小结
主题的使用 默认创建的Android工程中,在AndroidManifest.xml文件中有<application android:theme="@style/AppTheme&qu ...
- echarts使用记录(三):x/y轴数据和刻度显示及坐标中网格显示、格式化x/y轴数据
1.去掉坐标轴刻度线,刻度数据,坐标轴网格,以Y轴为例,同理X轴 xAxis: [{ type: 'category', axisTick: {//决定是否显示坐标刻度 alignWithLabel: ...
- 【云计算】Docker容器不能修改hosts文件怎么解决?
参考资料: http://bbs.csdn.net/topics/390871429 http://tieba.baidu.com/p/4295556808 http://stackoverflow. ...