理解javascript中try...catch...finally
本文为大家分析了javascript中try...catch...finally的使用方法,分享给大家供大家参考,具体内容如下
稍微复杂一点点,就要用到判断语句,ifelse进行条件判断,话说if条件else否则,这样的判断对于写程序代码的码侬已经是非常熟悉不过了。
如果你觉得这个也很简单,可能会用到混合ifelse条件判断语句加上trycatch来处理语句,虽然用trycatch能处理任何的对象,通过throw扔一条有错误的语句,接着catch抛出该对象或者该对象的错误,今天我们只说try...catch,下面的例子分别抛出数组、时间、原型函数、数字类型等。
functiontrycatch(){ vararray=[234], newdate=newDate(), fun=function(){}, is=12.22, call; try{ throwarray+'\n'+newdate.toLocaleString()+'\n'+fun.prototype.constructor+ '\n'+(typeofis=='number')+'\n'+call;//小心local后面还有一个'e' } catch(e){ console.log(e); } finally{ console.log('errfinally'); } } trycatch() //输出: //234 //2015/10/12下午10:07:03 //function(){} //true //undefined
更准确的说,try内放一条可能产生错误的语句。当try语句开始执行并抛出错误时,catch才执行内部的语句和对应的try内的错误信息message。何时执行finally语句,只有当try语句和catch语句执行之后,才执行finally语句,不论try抛出异常或者catch捕获都会执行finally语句。
functiontrycatch(){ try{ thrownewError('koringz'); } catch(e){ console.log(e.message); } finally{ console.log('errfinally'); } } trycatch() //输出: //koringz //errfinally
通过try扔出一条错误的语句,我们看到在catch捕获到一条错误的的信息//koringz,但是同样的finally也输出了//errfinally。虽然我们了解trycatch工作流的处理方式,但是并不了解finally块的代码处理程序,按照以往我们对finally语句一贯的思维方式,就是finally输出不受try和catch的限制和约束。以下是finally的几个输出演示代码:
functiontrycatch(){ try{ thrownewError('koringz'); } finally{ console.log('errfinally'); returnconsole.log('newfinally') } } trycatch() //errfinally //newfinally
如上所示,try扔一条错误的语句,finally输出的结果是://errfinally //newfinally。
functiontrycatch(){ try{ thrownewError('koringz'); } catch(e){ console.log('errfinally'); returnconsole.log('newfinally') } } trycatch() //errfinally //newfinally
如上所示,try扔一条错误的语句,catch捕获到错误输出结果同上finally。//errfinally //newfinally。
当我修改try的语句:
functiontrycatch(){ try{ // } catch(e){ console.log('errfinally'); returnconsole.log('newfinally') } } trycatch() //空(viod) //空(viod)
结果就输出都为空。//空(viod)。因为try没有扔出错误,所以catch没有捕获到异常,故输出结果就为空。
那么我们再看看下面这个案例,通过下面的例子,可能会让你更加地了解trycatch语句的异常处理。
try{ try{ thrownewError('open'); } catch(e){ console.info(e.message); throwe } finally{ console.log('finally'); } } catch(e){ console.log('op',e.message); } //open //finally //opopen
当我们在try可能引发错误的代码块内嵌套trycatch,通过嵌套的代码块try内扔一条可能出现错误的语句thrownewError('open');,紧接着嵌套的try将错误传递给嵌套的catch处理,最终通过嵌套的finally运行过后,我们看到最后一条结果//opopen,其实嵌套的catch捕获的错误信息扔给最外层catch捕获的。//opopen
也就是说:任何给定的异常只会被离它最近的封闭catch块捕获一次。
当然,在“内部”块抛出的任何新异常(因为catch块里的代码也可以抛出异常),都将会被“外部”块所捕获。
以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。