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 相关文章推荐
把textarea中字符串里含有的回车换行替换成<br>的javascript代码
Apr 20 Javascript
基于jsTree的无限级树JSON数据的转换代码
Jul 27 Javascript
关于query Javascript CSS Selector engine
Apr 12 Javascript
JavaScript将XML转成JSON的方法
Mar 12 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
Sep 05 Javascript
如何防止JavaScript自动插入分号
Nov 05 Javascript
javascript 实现动态侧边栏实例详解
Nov 11 Javascript
JS排序之冒泡排序详解
Apr 08 Javascript
微信小程序tabbar不显示解决办法
Jun 08 Javascript
jquery中有哪些api jQuery主要API
Nov 20 jQuery
vue.js实现格式化时间并每秒更新显示功能示例
Jul 07 Javascript
获取layer.open弹出层的返回值方法
Aug 20 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
基于node.js的快速开发透明代理
2010/12/25 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
jqTransform美化表单
2015/10/10 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
js实现密码强度检验
2017/01/15 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python线程之定位与销毁的实现
2019/02/17 Python
Python File(文件) 方法整理
2019/02/18 Python
python远程邮件控制电脑升级版
2019/05/23 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
数据库连接池的工作原理
2012/09/26 面试题
Java程序员综合测试题
2014/04/25 面试题
清明节网上祭英烈活动总结
2014/04/30 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
网吧温馨提示
2015/07/17 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
python自动化测试之Selenium详解
2022/03/13 Python