理解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 相关文章推荐
Jquery 1.42 checkbox 全选和反选代码
Mar 27 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
Oct 26 Javascript
jQuery Ajax中的事件详细介绍
Apr 16 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
Aug 17 Javascript
JS组件Bootstrap Select2使用方法详解
Apr 17 Javascript
功能强大的Bootstrap组件(结合js)
Aug 03 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
Oct 19 Javascript
JS+CSS3制作炫酷的弹窗效果
Nov 08 Javascript
详解vue跨组件通信的几种方法
Jun 15 Javascript
angular6的响应式表单的实现
Oct 10 Javascript
基于JS实现table导出Excel并保留样式
May 19 Javascript
VUE-ElementUI 自定义Loading图操作
Nov 11 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中simplexml_load_string函数使用说明
2011/01/01 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
Date对象格式化函数代码
2010/07/17 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
django-filter和普通查询的例子
2019/08/12 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
安全责任书范本
2014/04/15 职场文书
校园文明倡议书
2014/05/16 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
纯html+css实现打字效果
2021/08/02 HTML / CSS
Python学习开发之图形用户界面详解
2021/08/23 Python