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 相关文章推荐
一直复略了的一个问题,关于表单重复提交
Feb 15 Javascript
js将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
JS判断字符串包含的方法
May 05 Javascript
JQuery中Ajax()的data参数类型实例分析
Dec 15 Javascript
实例讲解jQuery中对事件的命名空间的运用
May 24 Javascript
Bootstrap轮播图的使用和理解4
Dec 14 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
Mar 30 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
Aug 21 jQuery
vue.js的状态管理vuex中store的使用详解
Nov 08 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
Aug 04 Javascript
JavaScript中展开运算符及应用的实例代码
Jan 14 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
Jan 18 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地址引用(php地址引用的效率问题)
2012/03/23 PHP
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
ThinkPHP路由详解
2015/07/27 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
js 单引号 传递方法
2009/06/22 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
python批量导出导入MySQL用户的方法
2013/11/15 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
Django自定义用户认证示例详解
2018/03/14 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
python代码实现猜拳小游戏
2020/11/30 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
差生评语大全
2014/05/04 职场文书
车贷收入证明范本
2014/09/14 职场文书
授权委托书
2014/09/17 职场文书
无房证明范本
2014/09/17 职场文书
离婚协议书范文2014
2014/10/16 职场文书
单位证明范文
2015/06/18 职场文书
纪委立案决定书
2015/06/24 职场文书
无故旷工检讨书
2015/08/15 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python