理解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 相关文章推荐
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
Dec 02 Javascript
JavaScript 设计模式 安全沙箱模式
Sep 24 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
Jan 15 Javascript
javascript两种function的定义介绍及区别说明
May 02 Javascript
jQuery实现公告文字左右滚动的实例代码
Oct 29 Javascript
点击页面其它地方隐藏该div的两种思路
Nov 18 Javascript
60个很实用的jQuery代码开发技巧收集
Dec 15 Javascript
JavaScript字符串常用的方法
Mar 10 Javascript
Vue监听数据对象变化源码
Mar 09 Javascript
Vue封装Swiper实现图片轮播效果
Feb 06 Javascript
javascript实现一款好看的秒表计时器
Sep 05 Javascript
jQuery实现简单全选框
Sep 13 jQuery
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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
popdiv
2006/07/14 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
Python使用MONGODB入门实例
2015/05/11 Python
Python如何实现文本转语音
2016/08/08 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
Python实现word2Vec model过程解析
2019/12/16 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
销售自荐信
2013/10/22 职场文书
会员卡清退活动总结
2014/08/27 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
深入理解python协程
2021/06/15 Python