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 27 Javascript
javascript常用对话框小集
Sep 13 Javascript
jQuery实现表格行上下移动和置顶效果
Jun 05 Javascript
jQuery绑定自定义事件的魔法升级版
Jun 30 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
Nov 20 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
如何编写一个d.ts文件的步骤详解
Apr 13 Javascript
浅谈js中的bind
Mar 18 Javascript
小程序:授权、登录、session_key、unionId的详解
May 15 Javascript
微信打开网址添加在浏览器中打开提示的办法
May 20 Javascript
Node.js 的 GC 机制详解
Jun 03 Javascript
vue中keep-alive、activated的探讨和使用详解
Jul 26 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+memcache实现消息队列案例分享
2014/05/21 PHP
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
javascript按顺序加载运行js方法
2017/12/01 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
深入理解Django-Signals信号量
2019/02/19 Python
Python3 批量扫描端口的例子
2019/07/25 Python
python批量修改ssh密码的实现
2019/08/08 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
基于python实现复制文件并重命名
2020/09/16 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
自我鉴定书范文
2013/10/02 职场文书
迎接领导欢迎词
2014/01/11 职场文书
购房协议书
2014/04/11 职场文书
安全责任书范本
2014/04/15 职场文书
竞选班委演讲稿
2014/04/28 职场文书
经理任命书模板
2014/06/06 职场文书
2014年督导工作总结
2014/11/19 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL
2022微信温控新功能上线
2022/05/09 数码科技