JavaScript中的异常捕捉介绍


Posted in Javascript onDecember 31, 2014

与Java语言相同,JavaScript可以通过throw语句来抛出异常。与Java语言不同的是,JavaScript中可以通过throw语句抛出所有类型的值,而不仅止于抛出错误对象。

//Throw an Error object.

try{

  throw new Error("Message in Error Object");

}catch(e){

    console.log(e);//Error: Message in Error Object

}
try{

  throw "Raw Message";

}catch(message){

  console.log(message);//Raw Message

  console.log(typeof message);//string

}
try{

  throw 42;

}catch(code){

  console.log(code);//42

  console.log(typeof code);//number

}

与Java语言一样,如果异常没有被任何catch语句所捕捉,那么该异常会最终抛给用户:

try{

  //throw new Error("test error");//Error will be thrown. Error: test error

}finally{

}
try{

  throw 42;//Error will be thrown. Error: 42

}finally{

}

对于抛出异常的捕捉,JavaScript使用的也是try/catch/finally语句,其使用规则为:try是必需的,catch和finally均为可选语句,但catch和finally中必须至少出现一个。

在catch语句中,可以定义一个参数e(或者其它任何合法的变量名),用于存储抛出的异常值。在catch语句内部,这个参数可以作为局部变量而使用。与JavaScript中其它的变量使用情况不同的是,catch语句中的参数变量仅在catch语句内部有效(该变量的作用域局限在catch语句中)。

对于finally语句,无论try中是否有异常抛出,finally中的代码均会被执行。详细情况包括:

1.try中无异常发生,当try语句执行完毕后,finnally中的代码将被执行。
2.try中无异常发生,但由于执行了break、continue或return语句而导致退出try代码时,finally中的代码将被执行。
3.try中发生异常,异常由catch语句处理完成后,finally中的代码被执行。
4.try中发生异常,但因没有catch语句导致该异常需要继续向上抛出时,finally中的代码将被执行。值得注意的是,在catch语句缺失的情况下,JavaScript将先执行finally中的代码,然后才向上继续抛出异常。

在finally代码中,如果出现break、continue或return语句,那么JavaScript将直接执行这些语句,而置try代码中可能存在的break、continue或return语句于不顾;即使catch语句缺失导致有异常需要上报,JS也会丢弃这个异常上报信息,继续执行finally代码中的break、continue或return语句。类似的,如果finally代码中也抛出了异常,那么JavaScript将丢弃所有try代码中的break、continue或return语句,同时也丢弃可能存在的异常上报行为,只抛出finally代码中的异常。

Javascript 相关文章推荐
初试jQuery EasyUI 使用介绍
Apr 01 Javascript
JavaScript定时器详解及实例
Aug 01 Javascript
使用jquery解析XML的方法
Sep 05 Javascript
javascript实现限制上传文件大小
Feb 06 Javascript
jQuery实现可编辑的表格实例讲解(2)
Sep 17 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
May 12 Javascript
AngularJS表单验证中级篇(3)
Sep 28 Javascript
JS制作类似选项卡切换的年历
Dec 03 Javascript
浅谈webpack打包之后的文件过大的解决方法
Mar 07 Javascript
详解node字体压缩插件font-spider的用法
Sep 28 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
Oct 29 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
Feb 15 Javascript
JavaScript中对象介绍
Dec 31 #Javascript
JavaScript中用字面量创建对象介绍
Dec 31 #Javascript
javascript设计模式之中介者模式Mediator
Dec 30 #Javascript
javascript实现window.print()去除页眉页脚
Dec 30 #Javascript
Javascript访问器属性实例分析
Dec 30 #Javascript
Javascript中数组sort和reverse用法分析
Dec 30 #Javascript
jQuery中:visible选择器用法实例
Dec 30 #Javascript
You might like
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
php组合排序简单实现方法
2016/10/15 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
2017/05/05 PHP
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
urllib2自定义opener详解
2014/02/07 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
python获取服务器响应cookie的实例
2018/12/28 Python
Python最小二乘法矩阵
2019/01/02 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
捷克玩具商店:Bambule
2019/02/23 全球购物
前台接待的工作职责
2013/11/21 职场文书
客房主管岗位职责
2013/12/09 职场文书
大课间体育活动方案
2014/03/12 职场文书
法制宣传教育方案
2014/05/09 职场文书
民族精神月活动总结
2014/08/28 职场文书
golang 实现Location跳转方式
2021/05/02 Golang
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle