浅谈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 相关文章推荐
javascript 学习之旅 (2)
Feb 05 Javascript
jquery异步请求实例代码
Jun 21 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
禁止空格提交表单的js代码
Nov 17 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
jQuery自适应轮播图插件Swiper用法示例
Aug 24 Javascript
谈谈JavaScript数组常用方法总结
Jan 24 Javascript
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
May 29 Javascript
详解微信小程序与内嵌网页交互实现支付功能
Oct 22 Javascript
前端路由&amp;webpack基础配置详解
Jun 10 Javascript
在vue中实现给每个页面顶部设置title
Jul 29 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
基于mysql的bbs设计(五)
2006/10/09 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
js Html结构转字符串形式显示代码
2011/11/15 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python正则实现计算器功能
2017/12/14 Python
Python方法的延迟加载的示例代码
2017/12/18 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
Python里面如何实现tuple和list的转换
2012/06/13 面试题
建筑专业毕业生推荐信
2013/11/21 职场文书
大学新学期计划书
2014/04/28 职场文书
创意婚礼策划方案
2014/05/18 职场文书
教师考核材料
2014/05/21 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
党性分析自查总结
2014/10/14 职场文书
师范生教育见习总结
2015/06/23 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
pt-archiver 主键自增
2022/04/26 MySQL