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 相关文章推荐
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
Feb 03 Javascript
关于js遍历表格的实例
Jul 10 Javascript
jQuery实现购物车计算价格功能的方法
Mar 25 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
Nov 12 Javascript
深入理解javascript的getTime()方法
Feb 16 Javascript
深入理解vue-router之keep-alive
Aug 31 Javascript
详解cordova打包成webapp的方法
Oct 18 Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 Javascript
js实现无限层级树形数据结构(创新算法)
Feb 27 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
Sep 12 Javascript
js实现滚动条自动滚动
Dec 13 Javascript
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
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
isset和empty的区别
2007/01/15 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
PHP和Mysql中转UTF8编码问题汇总
2015/10/10 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
javascript常用的正则表达式实例
2014/05/15 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
js常见遍历操作小结
2019/06/06 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
vue实现拖拽效果
2019/12/23 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
Vue的Options用法说明
2020/08/14 Javascript
Python 转换RGB颜色值的示例代码
2019/10/13 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
PyTorch的torch.cat用法
2020/06/28 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
英格兰足协官方商店:England Store
2019/07/12 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
自考毕业自我鉴定范文
2013/10/27 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
护理实习生带教计划
2015/01/16 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
初中历史教学反思
2016/02/19 职场文书