理解javascript中try...catch...finally


Posted in Javascript onDecember 25, 2015

本文为大家分析了javascript中try...catch...finally的使用方法,分享给大家供大家参考,具体内容如下

稍微复杂一点点,就要用到判断语句,if else进行条件判断,话说if条件else否则,这样的判断对于写程序代码的码侬已经是非常熟悉不过了。

如果你觉得这个也很简单,可能会用到混合if else条件判断语句加上try catch 来处理语句,虽然用try catch能处理任何的对象,通过throw扔一条有错误的语句,接着catch抛出该对象或者该对象的错误,今天我们只说try...catch,下面的例子分别抛出数组、时间、原型函数、数字类型等。

function trycatch () {
  var array = [234],
    newdate = new Date(),
    fun = function(){},
    is = 12.22,
    call;
  try{
    throw array + '\n' + newdate.toLocaleString() + ' \n' + fun.prototype.constructor + 
    '\n' + (typeof is == 'number') +' \n' + call ; //小心local后面还有一个'e'
  }
  catch(e){
    console.log(e);
  }
  finally{
    console.log('err finally');
  }
}
trycatch () 

// 输出:

// 234

// 2015/10/12 下午10:07:03 

// function (){}

// true 

// undefined

更准确的说,try内放一条可能产生错误的语句。当try语句开始执行并抛出错误时,catch才执行内部的语句和对应的try内的错误信息message。何时执行finally语句,只有当try语句和catch语句执行之后,才执行finally语句,不论try抛出异常或者catch捕获都会执行finally语句。

function trycatch () {
  try{
    throw new Error('koringz');
  }
  catch(e){
    console.log(e.message);
  }
  finally{
    console.log('err finally');
  }
}
trycatch ()
// 输出:
// koringz
// err finally

通过try扔出一条错误的语句,我们看到在catch捕获到一条错误的的信息// koringz,但是同样的finally也输出了// err finally。虽然我们了解try catch工作流的处理方式,但是并不了解finally块的代码处理程序,按照以往我们对finally语句一贯的思维方式,就是finally输出不受try和catch的限制和约束。以下是finally的几个输出演示代码:

function trycatch () {
  try{
    throw new Error('koringz');
  }
  finally{
    console.log('err finally');
    return console.log('new finally')
  }
}
trycatch ()
// err finally
// new finally

如上所示,try扔一条错误的语句,finally输出的结果是: // err finally  // new finally。

function trycatch () {
  try{
    throw new Error('koringz');
  }
  catch(e){
    console.log('err finally');
    return console.log('new finally')
  }
}
trycatch ()
// err finally
// new finally

如上所示,try扔一条错误的语句,catch捕获到错误输出结果同上finally。 // err finally  // new finally。

当我修改try的语句:

function trycatch () {
  try{
    // 
  }
  catch(e){
    console.log('err finally');
    return console.log('new finally')
  }
}
trycatch ()
// 空(viod)
// 空(viod)

结果就输出都为空。// 空(viod)。因为try没有扔出错误,所以catch没有捕获到异常,故输出结果就为空。

那么我们再看看下面这个案例,通过下面的例子,可能会让你更加地了解try catch语句的异常处理。

try{
  try{
    throw new Error('open');
  }
  catch(e){
    console.info(e.message);
    throw e
  }
  finally{
    console.log('finally');
  }
}
catch(e){
  console.log('op',e.message);
}
// open
// finally
// op open

当我们在try可能引发错误的代码块内嵌套try catch,通过嵌套的代码块try内扔一条可能出现错误的语句 throw new Error('open');,紧接着嵌套的try将错误传递给嵌套的catch处理,最终通过嵌套的finally运行过后,我们看到最后一条结果// op open,其实嵌套的catch捕获的错误信息扔给最外层catch捕获的。// op open

也就是说:任何给定的异常只会被离它最近的封闭catch块捕获一次。

当然,在“内部”块抛出的任何新异常(因为catch块里的代码也可以抛出异常),都将会被“外部”块所捕获。

以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
表格 隔行换色升级版
Nov 07 Javascript
详细讲解JS节点知识
Jan 31 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
Apr 16 Javascript
Jquery通过JSON字符串创建JSON对象
Aug 24 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 Javascript
javascript中加var和不加var的区别 你真的懂吗
Jan 06 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
Sep 20 Javascript
10道典型的JavaScript面试题
Mar 22 Javascript
vue实现自定义H5视频播放器的方法步骤
Jul 01 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
Aug 26 Javascript
Vue 实现从小到大的横向滑动效果详解
Oct 16 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 Javascript
javascript实现简单加载随机色方块
Dec 25 #Javascript
学习JavaScript鼠标响应事件
Dec 25 #Javascript
理解javascript中DOM事件
Dec 25 #Javascript
理解JavaScript中worker事件api
Dec 25 #Javascript
基于jquery实现省市区三级联动效果
Dec 25 #Javascript
js实现文本框输入文字个数限制代码
Dec 25 #Javascript
js实现简单的验证码
Dec 25 #Javascript
You might like
解析php中const与define的应用区别
2013/06/18 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
js 替换
2008/02/19 Javascript
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
怎么样写好简历中的自我评价
2013/10/25 职场文书
岗位职责怎么写
2014/03/14 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
商超业务员岗位职责
2015/02/13 职场文书
大学生自荐信范文
2015/03/05 职场文书
公司年会开场白
2015/06/01 职场文书
会议室使用管理制度
2015/08/06 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android