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 相关文章推荐
可以支持多中格式的JS键盘
May 02 Javascript
JavaScript学习历程和心得小结
Aug 16 Javascript
jQuery技巧总结
Jan 01 Javascript
jquery.cookie用法详细解析
Dec 18 Javascript
高性能JavaScript 重排与重绘(2)
Aug 11 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
详解用node-images 打造简易图片服务器
May 08 Javascript
js实现复制功能(多种方法集合)
Jan 06 Javascript
解决vue axios的封装 请求状态的错误提示问题
Sep 25 Javascript
12个提高JavaScript技能的概念(小结)
May 09 Javascript
JS实现动态星空背景效果
Nov 01 Javascript
纯JS开发baguetteBox.js响应式画廊插件
Jun 28 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 CURL与java http使用方法详解
2018/01/26 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
js中eval详解
2012/03/30 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
Python中的random()方法的使用介绍
2015/05/15 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
html5视频播放_动力节点Java学院整理
2017/07/13 HTML / CSS
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
SQL SERVER面试资料
2013/03/30 面试题
二年级数学教学反思
2014/01/21 职场文书
办公室人员先进事迹
2014/01/27 职场文书
十八大报告观后感
2014/01/28 职场文书
管理标语大全
2014/06/24 职场文书
财务人员入职担保书
2015/09/22 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
浅谈Vue的computed计算属性
2022/03/21 Vue.js