理解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下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
Oct 22 Javascript
Jquery实现鼠标移动放大图片功能实例
Mar 25 Javascript
js实现刷新iframe的方法汇总
Apr 27 Javascript
js显示文本框提示文字的方法
May 07 Javascript
javascript 分号总结及详细介绍
Sep 24 Javascript
实现一个完整的Node.js RESTful API的示例
Sep 29 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
Oct 26 Javascript
JS异步函数队列功能实例分析
Nov 28 Javascript
vue中eslintrc.js配置最详细介绍
Dec 21 Javascript
详解小程序之简单登录注册表单验证
May 13 Javascript
Node.js系列之安装配置与基本使用(1)
Aug 30 Javascript
js+canvas实现纸牌游戏
Mar 16 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
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
Python 不同对象比较大小示例探讨
2014/08/21 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
主要的Ajax框架都有什么
2013/11/14 面试题
外贸公司实习自我鉴定
2013/09/24 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
统计工作个人总结
2015/03/03 职场文书
四年级语文教学反思
2016/03/03 职场文书
js不常见操作运算符总结
2021/11/20 Javascript