浅谈JavaScript异常处理语句


Posted in Javascript onJune 26, 2015

程序运行过程中难免会出错,出错后的运行结果往往是不正确的,因此运行时出错的程序通常被强制中止。运行时的错误统称为异常,为了能在错误发生时得到一个处理的机会,JavaScript提供了异常处理语句。包含try-catch、try-catch-finally和throw.

try-catch语句

try{
tryStatements
}
catch(exception){
catchStatements
}

参数说明:
tryStatements:必选项。可能发生错误的语句序列。
exception:必选项。任何变量名,用于引用错误发生时的错误对象。
catchStatements:可选项。错误处理语句,用于处理tryStatements中发生的错误。
编码时通常将可能发生错误的语句写入try块的花括号中,并在其后的catch块中处理错误。错误信息包含在一个错误对象(Error对象)里,通过exception的引用可以访问该对象。根据错误对象中的错误信息以确定如果处理。

<script type="text/javascript">
try{
var n = error; //人为引发一个错误,error未定义就使用
}
catch(e){
alert((e.number&0xFFFF) + "号错误:" + e.description); //错误处理:仅输出错误信息
}
</script>

该代码段使用了一个try-catch结构处理程序运行时错误,第4行人为引发一个错误。第6~9行的catch块捕捉错误并处理。
提示:JavaScript的错误为运行时错误和语法错误,语法错误在编译阶段发现;而运行时错误在运行过程中发现,错误处理语句仅能处理运行时错误。

try-catch-finally语句

try{
tryStatements;
}
catch( exception ){
handleStatements;
}
finally{
fianllyStatements;
}

参数说明:
tryStatements:必选项,可能引发异常的语句。
handleStatements:可选项,异常处理语句。
fianllyStatements:可选项,在其他过程执行结束后无条件执行的语句。
尽管没有错误发生finally块中的语句也会在最后得到执行,通常在此放置资源清理的程序代码。
遍历一个有苹果名称的数组时人为引发一个异常。

<script type="text/javascript">
try{
var fruit = new Array("鸭梨","苹果","葡萄","李子");

for( n=0;n<fruit.length;m++)
{
document.write(fruit[n] + "");
}
}
catch( e )
{
alert( (e.number&0xFFFF) + "号错误:" + e.description );
}
finally{
fruit = null;
alert("fruit="+fruit+"已经断开fruit数组的引用!");
}
</script>

该代码段第5行使用一个未定义的变量m,人为引发一个异常。第11~13行捕捉异常并处理。第14~18行的finally块清理资源,该语句无条件被执行,可以保证fruit数组所占资源不被泄露。

throw语句

多个异常处理语句可以嵌套使用。当多个结构嵌套时,处于里层try-catch语句不打算自己处理异常则可以将其抛出。父级try-catch语句可以接收到子级抛出的异常,抛出操作使用throw语句。
throw 表达式;
表达式的值是作为错误信息对象传出,该对象将被catch语句捕获。throw语句可以使用在打算抛出异常的任意地方。
通常情况下0不能作为除数,因此可以为除数为0定义一个异常并抛出。

<script>
try{
var dividend = 100; //被除数
var parts = 0; //除数
if( parts == 0){ //如果除数为0则抛出异常
throw "Error:parts is zero"; //抛出异常
}
alert("每人" + dividend/parts + "份"); //输出提示信息
}
catch(e){ //此处将捕获try块中抛出的异常
alert(e); //用对话框输出错误对象的信息
}
</script>

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JS 页面计时器示例代码
Oct 28 Javascript
SuperSlide2实现图片滚动特效
Jun 20 Javascript
Javascript遍历table中的元素示例代码
Jul 08 Javascript
Node.js中的缓冲与流模块详细介绍
Feb 11 Javascript
JS实现从连接中获取youtube的key实例
Jul 02 Javascript
微信小程序 数据访问实例详解
Oct 08 Javascript
AngularJS 应用身份认证的技巧总结
Nov 07 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 jQuery
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
Aug 20 Javascript
浅谈vue后台管理系统权限控制思考与实践
Dec 19 Javascript
React+EggJs实现断点续传的示例代码
Jul 07 Javascript
javascript实现一个数值加法函数
Jun 26 #Javascript
javascript排序函数实现数字排序
Jun 26 #Javascript
javascript实现给定半径求出圆的面积
Jun 26 #Javascript
js实现数组转换成json
Jun 26 #Javascript
javascript实现倒计时(精确到秒)
Jun 26 #Javascript
基于jQuery实现的旋转彩圈实例
Jun 26 #Javascript
jquery实现的树形目录实例
Jun 26 #Javascript
You might like
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
python模糊图片过滤的方法
2018/12/14 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
tensorflow的计算图总结
2020/01/12 Python
python如何写个俄罗斯方块
2020/11/06 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
高分子材料与工程专业个人求职信
2013/12/15 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
冬季安全检查方案
2014/05/23 职场文书
庆六一开幕词
2015/01/29 职场文书
爱国电影观后感
2015/06/19 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
反邪教学习心得体会
2016/01/15 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
nginx部署多前端项目的几种方法
2021/05/25 Servers
Java设计模式之享元模式示例详解
2022/03/03 Java/Android