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 相关文章推荐
2007/12/23更新创意无限,简单实用(javascript log)
Dec 24 Javascript
ExtJS下grid的一些属性说明
Dec 13 Javascript
Javascript实现视频轮播在pc端与移动端均可
Sep 29 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
javascript用函数实现对象的方法
May 14 Javascript
jQuery插件制作之全局函数用法实例
Jun 01 Javascript
Node.js编程中客户端Session的使用详解
Jun 23 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
微信小程序 页面传值详解
Mar 10 Javascript
详解Vue CLI3配置解析之css.extract
Sep 14 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
Dec 12 Javascript
如何利用JavaScript编写更好的条件语句详解
Aug 10 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把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
PHP模块化安装教程
2016/06/01 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
基于JQuery的Ajax方法使用详解
2017/08/16 jQuery
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
JS一次前端面试经历记录
2020/03/19 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
python excel转换csv代码实例
2019/08/26 Python
python实现堆排序的实例讲解
2020/02/21 Python
违反工作纪律检讨书
2014/02/15 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
初中教师业务学习材料
2014/05/12 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
对照检查剖析材料
2014/09/30 职场文书
律政俏佳人观后感
2015/06/09 职场文书
2016年情人节广告语
2016/01/28 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis
Python实现科学占卜 让视频自动打码
2022/04/09 Python