理解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 html动态生成select标签出问题的解决方法
Nov 20 Javascript
SeaJS入门教程系列之完整示例(三)
Mar 03 Javascript
浅谈javascript回调函数
Dec 07 Javascript
基于jQuery实现放大镜特效
Oct 19 Javascript
Three.js学习之Lamber材质和Phong材质
Aug 04 Javascript
AngularJS入门教程之路由与多视图详解
Aug 19 Javascript
angular+ionic 的app上拉加载更新数据实现方法
Jan 16 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
Jan 21 Javascript
求js数组的最大值和最小值的四种方法
Mar 03 Javascript
vue将对象新增的属性添加到检测序列的方法
Feb 24 Javascript
vue-cli项目无法用本机IP访问的解决方法
Sep 20 Javascript
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
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
phpwind中的数据库操作类
2007/01/02 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
php实现简单加入购物车功能
2017/03/07 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
Angular2数据绑定详解
2017/04/18 Javascript
NodeJS收发GET和POST请求的示例代码
2017/08/25 NodeJs
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
Python操作csv文件实例详解
2017/07/31 Python
pip安装python库的方法总结
2019/08/02 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
幼儿园中秋节活动反思
2014/02/16 职场文书
地理教师岗位职责
2014/03/16 职场文书
个人年度总结报告
2015/03/09 职场文书
孕妇病假条怎么写
2015/08/17 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL
python pygame 开发五子棋双人对弈
2022/05/02 Python