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的闭包
Dec 31 Javascript
js 页面元素的几个用法总结
Nov 18 Javascript
关于JavaScript中name的意义冲突示例介绍
May 29 Javascript
javascript函数中参数传递问题示例探讨
Jul 31 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
js实现模拟银行卡账号输入显示效果
Nov 18 Javascript
基于jQuery实现放大镜特效
Oct 19 Javascript
jQuery简单实现仿京东分类导航层效果
Jun 07 Javascript
深入理解 webpack 文件打包机制(小结)
Jan 08 Javascript
使用vue制作探探滑动堆叠组件的实例代码
Mar 07 Javascript
安装vue-cli的简易过程
May 22 Javascript
解决layUI的页面显示不全的问题
Sep 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
合作指挥官:孟斯克
2020/03/16 星际争霸
PHP获取当前页面URL函数实例
2014/10/22 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
CI框架常用方法小结
2016/05/17 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
Python操作列表之List.insert()方法的使用
2015/05/20 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
python判断自身是否正在运行的方法
2019/08/08 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
怎样写好创业计划书的内容
2014/02/06 职场文书
校庆活动方案
2014/03/31 职场文书
班主任寄语2015
2015/02/26 职场文书
整改通知书
2015/04/20 职场文书
计划生育目标责任书
2015/05/09 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
七年级作文之环保作文
2019/10/17 职场文书