理解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 相关文章推荐
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
Mar 22 Javascript
script标签的 charset 属性使用说明
Dec 04 Javascript
基于JQuery的抓取博客园首页RSS的代码
Dec 01 Javascript
js hover 定时器(实例代码)
Nov 12 Javascript
Jquery操作Ajax方法小结
Nov 29 Javascript
基于javascript如何传递特殊字符
Nov 30 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
Angular 2应用的8个主要构造块有哪些
Oct 17 Javascript
浅谈React 属性和状态的一些总结
Nov 21 Javascript
详解Vue方法与事件
Mar 09 Javascript
vue内置指令详解
Apr 03 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
Jul 30 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 生成饼图 三维饼图
2009/09/28 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
vue弹窗组件使用方法
2018/04/28 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Python程序设计入门(3)数组的使用
2014/06/16 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
没编程基础可以学python吗
2020/06/17 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
剪彩仪式主持词
2014/03/19 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
鸦片战争观后感
2015/06/09 职场文书
初一数学教学反思
2016/02/17 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
创业计划书之养殖业
2019/10/11 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技
python pygame 开发五子棋双人对弈
2022/05/02 Python