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 相关文章推荐
JavaScript 事件冒泡简介及应用
Jan 11 Javascript
jQuery切换所有复选框选中状态的方法
Jul 02 Javascript
JS控制层作圆周运动的方法
Jun 20 Javascript
JavaScript微信定位功能实现方法
Nov 29 Javascript
JS瀑布流实现方法实例分析
Dec 19 Javascript
JS动态修改网页body的背景色实例代码
Oct 07 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
Apr 13 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
May 04 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
Sep 21 Javascript
原生JS实现的自动轮播图功能详解
Dec 28 Javascript
vue实现输入一位数字转汉字功能
Dec 13 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
Sep 04 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获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
CSS和Javascript简单复习资料
2010/06/29 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
javascript禁止超链接跳转的方法
2016/02/02 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
使用python实现strcmp函数功能示例
2014/03/25 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
使用python3实现操作串口详解
2019/01/01 Python
python for循环remove同一个list过程解析
2019/08/14 Python
python tkinter canvas使用实例
2019/11/04 Python
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
英文自荐信常用句子
2014/03/26 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技