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 相关文章推荐
jquery的ajax异步请求接收返回json数据实例
Jun 16 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
Aug 13 Javascript
正则表达式优化JSON字符串的技巧
Dec 24 Javascript
原生JavaScript制作计算器
Oct 16 Javascript
Bootstrap CSS组件之导航条(navbar)
Dec 17 Javascript
ES6 javascript中class类的get与set用法实例分析
Oct 30 Javascript
分析JS单线程异步io回调的特性
Dec 01 Javascript
ES6数组与对象的解构赋值详解
Jun 14 Javascript
react PropTypes校验传递的值操作示例
Apr 28 Javascript
JavaScript 接口原理与用法实例详解
May 12 Javascript
简单了解前端渐进式框架VUE
Jul 20 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
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/03 欧美动漫
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
javascript 特殊字符串
2009/02/25 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
Javascript window对象详解
2014/11/12 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
python opencv实现图像边缘检测
2019/04/29 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
基于python的opencv图像处理实现对斑马线的检测示例
2020/11/29 Python
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
车工岗位职责
2013/11/26 职场文书
简历中的自我评价怎么写
2014/01/29 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
卖车协议书范文
2016/03/23 职场文书
话题作文之学会尊重
2019/12/16 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS