理解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 相关文章推荐
Display SQL Server Version Information
Jun 21 Javascript
在网页里看flash的trace数据的js类
Jan 10 Javascript
js trim函数 去空格函数与正则集锦
Nov 20 Javascript
jquery获取input表单值的代码
Apr 19 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
Jan 09 Javascript
原生js实现ajax方法(超简单)
Sep 20 Javascript
搭建Bootstrap离线文档的方法
Dec 02 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
Feb 22 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
Oct 04 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
Jan 18 Javascript
JS array数组检测方式解析
May 19 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
本地计算机无法启动Apache故障处理
2014/08/08 PHP
php实现的SESSION类
2014/12/02 PHP
jQuery 表格插件整理
2010/04/27 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
原生JS实现图片左右轮播
2016/12/30 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
python绘制简单折线图代码示例
2017/12/19 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
会计工作岗位职责
2015/02/03 职场文书
公司酒会主持词
2015/07/02 职场文书
二年级数学教学反思
2016/02/16 职场文书
实习报告怎么写
2019/06/20 职场文书
oracle索引总结
2021/09/25 Oracle
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang