理解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 datatable后台封装数据示例代码
Aug 07 Javascript
JavaScript中字面量与函数的基本使用知识
Oct 20 Javascript
基于JavaScript如何制作遮罩层对话框
Jan 26 Javascript
原生js实现轮播图
Feb 27 Javascript
Vue2.0 多 Tab切换组件的封装实例
Jul 28 Javascript
通过js动态创建标签,并设置属性方法
Feb 24 Javascript
vue请求本地自己编写的json文件的方法
Apr 25 Javascript
JS中this的4种绑定规则详解
Feb 04 Javascript
JavaScript canvas动画实现时钟效果
Feb 10 Javascript
react国际化化插件react-i18n-auto使用详解
Mar 31 Javascript
vue中v-model对select的绑定操作
Aug 31 Javascript
JavaScript中遍历的十种方法总结
Dec 15 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的call_user_func传reference引发的思考
2010/07/23 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
python数字类型math库原理解析
2020/03/02 Python
美术教师自我鉴定
2014/02/12 职场文书
大学新生军训感言
2014/02/25 职场文书
担保书格式及范文
2014/04/01 职场文书
企业文化理念标语
2014/06/10 职场文书
工地材料员岗位职责
2015/04/11 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
八月一日观后感
2015/06/10 职场文书
大学生党课心得体会
2016/01/07 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
python实现三阶魔方还原的示例代码
2021/04/28 Python
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
css弧边选项卡的项目实践
2023/05/07 HTML / CSS