理解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 相关文章推荐
JavaScript 处理Iframe自适应高度(同或不同域名下)
Mar 29 Javascript
jQuery文本框(input textare)事件绑定方法教程
Apr 24 Javascript
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
简单选项卡 js和jquery制作方法分享
Feb 26 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 Javascript
vue调用高德地图实例代码
Apr 28 Javascript
JavaScript动态绑定详解
Sep 14 Javascript
Vue表单及表单绑定方法
Sep 04 Javascript
javascript实现的时间格式加8小时功能示例
Jun 13 Javascript
vuex中store存储store.commit和store.dispatch的用法
Jul 24 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控制前台弹出对话框的实现方法
2016/08/21 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
Python 自动补全(vim)
2014/11/30 Python
python实现端口转发器的方法
2015/03/13 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
python实现实时监控文件的方法
2016/08/26 Python
详解python中asyncio模块
2018/03/03 Python
python实现简单图片物体标注工具
2019/03/18 Python
Python的条件锁与事件共享详解
2019/09/12 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
顶撞领导检讨书
2014/01/29 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
python 爬取天气网卫星图片
2021/06/07 Python
关于JavaScript轮播图的实现
2021/11/20 Javascript
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL