理解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 相关文章推荐
鼠标右击事件代码(asp.net后台)
Jan 27 Javascript
Javascript实现滑块滑动改变值的实现代码
Apr 12 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
Feb 07 Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 Javascript
原生javaScript实现图片延时加载的方法
Dec 22 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
Jan 27 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
Feb 12 Javascript
js基于myFocus实现轮播图效果
Feb 14 Javascript
jQuery length 和 size()区别总结
Apr 26 jQuery
在HTML文档中嵌入JavaScript的四种方法
May 07 Javascript
详解浏览器缓存和webpack缓存配置
Jul 06 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
Oct 10 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类的定义与继承用法实例
2015/07/07 PHP
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
python中的字典详细介绍
2014/09/18 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
python实现控制COM口的示例
2019/07/03 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
python在不同条件下的输入与输出
2020/02/13 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
大学生村官任职感言
2014/01/09 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
安全教育演讲稿
2014/05/09 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
交通违章检讨书
2014/09/21 职场文书
2015年计划生育责任书
2015/05/08 职场文书
预备党员转正意见
2015/06/01 职场文书
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python
Go 语言中 20 个占位符的整理
2021/10/16 Golang
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python