浅谈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 11 Javascript
jQuery的each终止或跳过示例代码
Dec 12 Javascript
使用jQuery时Form表单元素ID和name命名大忌
Mar 06 Javascript
JavaScript开发人员的10个关键习惯小结
Dec 05 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
超全面的JavaScript开发规范(推荐)
Jan 21 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
May 01 Javascript
小程序实现单选多选功能
Nov 04 Javascript
解决vue 表格table列求和的问题
Nov 06 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
PHP set_time_limit(0)长连接的实现分析
2010/03/02 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
python查看微信好友是否删除自己
2016/12/19 Python
Python单元测试简单示例
2018/07/03 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
python中open函数的基本用法示例
2019/09/07 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
Delphi软件工程师试题
2013/01/29 面试题
机关门卫制度
2014/02/01 职场文书
工程部岗位职责范本
2015/04/11 职场文书
预备党员入党感想
2015/08/10 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书