理解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 相关文章推荐
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
Feb 03 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
Feb 10 Javascript
jQuery获取当前点击的对象元素(实现代码)
May 19 Javascript
浅析JS获取url中的参数实例代码
Jun 14 Javascript
JQuery对ASP.NET MVC数据进行更新删除
Jul 13 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
Dec 08 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
angular 基于ng-messages的表单验证实例
May 04 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
Sep 05 Javascript
详解在HTTPS 项目中使用百度地图 API
Apr 26 Javascript
微信小程序实现批量倒计时功能
Nov 01 Javascript
el-table树形表格表单验证(列表生成序号)
May 31 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
数字转英文
2006/12/06 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
php ajax实现文件上传进度条
2016/03/29 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
PHP 裁剪图片
2021/03/09 PHP
短信提示使用 特效
2007/01/19 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
质量月活动策划方案
2014/03/10 职场文书
应届大专毕业生自我鉴定
2014/04/08 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
连锁超市项目计划书
2014/09/15 职场文书
合作意向书范本
2019/04/17 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS