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 大家可以参考下
Oct 13 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
Apr 02 Javascript
JS获取整个页面文档的实现代码
Dec 15 Javascript
jq选项卡鼠标延迟的插件实例
May 13 Javascript
JS 日期比较大小的简单实例
Jan 13 Javascript
js和css写一个可以自动隐藏的悬浮框
Mar 05 Javascript
iscroll动态加载数据完美解决方法
Jul 18 Javascript
ES6学习教程之模板字符串详解
Oct 09 Javascript
webpack-dev-server自动更新页面方法
Feb 22 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 Javascript
微信小程序实现录音时的麦克风动画效果实例
May 18 Javascript
详解Vue.js 响应接口
Jul 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中的string类型使用说明
2010/07/27 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
Smarty3配置及入门语法
2017/02/22 PHP
基于php编程规范(详解)
2017/08/17 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
js 实现浏览历史记录示例
2014/04/20 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Django入门使用示例
2017/12/12 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
使用Django清空数据库并重新生成
2020/04/03 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
python中count函数知识点浅析
2020/12/17 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
营销与策划个人求职信
2013/09/22 职场文书
道德之星事迹材料
2014/05/03 职场文书
安全保证书格式
2015/02/28 职场文书
戒赌保证书
2015/05/11 职场文书
导游词之无锡古运河
2019/11/14 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang
SQL Server中锁的用法
2022/05/20 SQL Server