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 05 Javascript
JavaScript实现广告的关闭与显示效果实例
Jul 02 Javascript
跨域请求的完美解决方法(JSONP, CORS)
Jun 12 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
Aug 02 Javascript
JS控制FileUpload的上传文件类型实例代码
Oct 07 Javascript
C#微信小程序服务端获取用户解密信息实例代码
Mar 10 Javascript
详解Vue路由开启keep-alive时的注意点
Jun 20 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 jQuery
node.js利用mongoose获取mongodb数据的格式化问题详解
Oct 06 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
Sep 14 Javascript
vue 路由守卫(导航守卫)及其具体使用
Feb 25 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
Aug 05 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下获取客户端ip地址的函数
2010/03/15 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
PHP速成大法
2015/01/30 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
IE 当eval遇上function的处理
2011/08/09 Javascript
jquery+ajax请求且带返回值的代码
2015/08/12 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
Python中模块与包有相同名字的处理方法
2017/05/05 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
详解Python 中的容器 collections
2020/08/17 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
实习单位推荐信范文
2013/11/27 职场文书
实用求职信范文分享
2013/12/25 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
总结会主持词
2015/07/02 职场文书