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

 更新时间:2015年12月25日 09:28:36   作者:微宇宙  
这篇文章主要帮助大家理解javascript中try...catch...finally,从浅入深,一步步掌握javascript中try...catch...finally的使用方法,感兴趣的小伙伴们可以参考一下

本文为大家分析了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实现经典贪吃蛇游戏

    这篇文章主要为大家详细介绍了JavaScript实现经典贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 微信头像地址失效踩坑记附带解决方案

    微信头像地址失效踩坑记附带解决方案

    这篇文章主要介绍了微信头像地址失效踩坑记附带解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • JavaScript之自定义类型

    JavaScript之自定义类型

    在JavaScript中,创建一个具有自定义属性和方法的对象有很多种模式,下面一一进行介绍
    2012-05-05
  • ES6使用let命令更简单的实现块级作用域实例分析

    ES6使用let命令更简单的实现块级作用域实例分析

    这篇文章主要介绍了ES6使用let命令更简单的实现块级作用域,结合实例形式分析了ES6中let命令与var的区别及具体使用方法,需要的朋友可以参考下
    2017-03-03
  • javascript中一些奇葩的日期换算方法总结

    javascript中一些奇葩的日期换算方法总结

    这篇文章主要给大家总结介绍了关于javascript中的一些奇葩的日期换算方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 深入理解 JavaScript 中的 JSON

    深入理解 JavaScript 中的 JSON

    我们先来看一个JS中常见的JS对象序列化成JSON字符串的问题,请问,以下JS对象通过JSON.stringify后的字符串是怎样的
    2017-04-04
  • js实现股票实时刷新数据案例

    js实现股票实时刷新数据案例

    下面小编就为大家带来一篇js实现股票实时刷新数据案例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Node调试工具JSHint的安装及配置教程

    Node调试工具JSHint的安装及配置教程

    Node的优势我就不再乱吹捧了,它让javascript统一web的前后台成为了可能。但是对于新手来说,server端的JS代码可能不像client端的代码那么好调试,直观。client端JS代码的调试基本上经历了一个从“肉眼--alert()--firebug(或者其它的developer tools)”的一个过程。而对于server端的调试,可能新手仍然停留在使用“肉眼--console()”的阶段。其实,Node经过了这么多年(虽然才短短几年)的发展,也有了很多不错的第三方的调试工具。包括Node内建的调试工具debugger、node-inspector等。
    2014-05-05
  • IE8 中使用加速器(Activities)

    IE8 中使用加速器(Activities)

    在IE8中使用Activities感觉就是让自己使用IE更方便了,懒人就是得懒得底。
    2010-05-05
  • JS入门必备之八种数据类型

    JS入门必备之八种数据类型

    Javascript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架,这篇文章主要给大家介绍了关于JS中八种数据类型的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01

最新评论