理解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 相关文章推荐
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
JavaScript实现快速排序(自已编写)
Dec 19 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
Jun 09 Javascript
JavaScript DOM节点添加示例
Jul 16 Javascript
jQuery给动态添加的元素绑定事件的方法
Mar 09 Javascript
jQuery插件imgAreaSelect基础讲解
May 26 jQuery
Angular X中使用ngrx的方法详解(附源码)
Jul 10 Javascript
JS实现的文字间歇循环滚动效果完整示例
Feb 13 Javascript
vue iView 上传组件之手动上传功能
Mar 16 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
May 21 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
Jun 27 Javascript
微信小程序获取地理位置及经纬度授权代码实例
Sep 18 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获取网址的顶级域名函数代码
2012/09/24 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
PHP加密解密实例分析
2015/12/25 PHP
PHP微信分享开发详解
2017/01/14 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
javascript运算符——位运算符全面介绍
2016/07/14 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
用Python遍历C盘dll文件的方法
2015/05/06 Python
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
python实现感知器算法详解
2017/12/19 Python
python队列Queue的详解
2019/05/10 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
Html5之svg可缩放矢量图形_动力节点Java学院整理
2017/07/17 HTML / CSS
美国存储和组织商店:The Container Store
2017/08/16 全球购物
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
公务员培训心得体会
2013/12/28 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
生日宴会家属答谢词
2015/09/29 职场文书