js如何抛出和捕获异常

js如何抛出和捕获异常
初级开发人员往往很少使用js的抛出和捕获异常,但抛出和捕获异常往往是非常必要的,如果学过java开发的,对于这样的抛出和捕获异常会比较熟悉 。下面就来介绍下如何使用js的抛出和捕获异常
捕获异常的语法如下:
try{
//运行代码
}catch(err){
//处理错误
}
测试示例代码如下,abc是一个未定义的函数,会抛出异常,异常信息会被trycatch,进入catch语句中执行
打开浏览器运行测试页面,出现弹框提示信息,提示abcisnotdefined,提示的内容是catch语句里面我们处理的异常信息 。
如果把trycatch去掉试试,会出现什么情况呢,测试代码如下,未定义的方法后面添加一条日志打印信息
控制台报错了,后续程序中断没有执行,因为添加的日志打印信息没有执行 。针对这种没有捕获的异常,会异常中断程序,页面上没有合理的提示信息,用户会莫名其妙,体验非常不好 。
在js中怎么样捕获java抛出的异常数据js也可以try{}catch(e){}
但如果是打开网页时Server返回500错,就没法捕获了
javascript异常处理虽然最近几年Javascript有了很多进步,但是相比于其它语言的开发者,Javascript开发者仍然只有少得可怜的调试工具 。因此在Javascript中throw
error就显得比其它语言更有价值 。我们可以用throw关键字来抛出一个对象 。我们可以抛出任何类型的对象,不过Error对象是最常用的:
throw new Error("Something bad happened.")
当我们用这样的方式抛出错误,而这个错误又不被try-catch捕获时,浏览器就会用其通常的方式显示上面的错误信息(Something
bad
happened) 。在IE里会在浏览器的左下角出现一个小图标,当双击图标时会弹出一个带着上面错误提示的对话框;安装有Firebug插件的火狐浏览器会在控制台显示错误信息;Safar和Chrome会在Web
Inspector中显示;Opera会在错误控制台显示 。一句话,它们会像你没有抛出错误时一样处理 。但不同的是它会通过浏览器向你提供具体的信息,而不是一个发生错误的行列号 。你可以为错误信息加入任何需要的信息,来帮你成功解决问题 。我建议在错误信息中提供发生错误的函数名称以及错误原因 。看下面这个函数:
function addClass(element, className){
element.className += " " + className;
}
这个函数的功能是向一个给定的element加入新的CSS
class(这在Javascript中非常普遍) 。但如果element是null的时候会发生什么?你会得到一个这样的错误提示“object
expected”,很隐晦 。然后你需要查看执行堆栈(如果浏览器支持这个功能)来准确定位错误的源头 。如果我们抛出一个错误调试就变得简单了:
function addClass(element, className){
if (element != null && typeof element.className == "string"){
element.className += " " + className;
} else {
throw new Error("addClass(): First arg must be a DOM element.");
}
}
先不讨论如何精确的判断对象是否是一个DOM
element,这个方法现在能够在非法的element参数传入时提供一个更明确的错误信息 。看到了如此详尽的错误描述你就能立刻找到错误的源头了 。我习惯把throw
error看作是贴一个任务贴纸,告诉我错误的原因 。
懂得了如何throw error只是事情的一半;懂得何时throw
error则是另一半 。因为Javascript并不对参数进行类型检查,许多开发者都错误的认为他们应该在所有的函数中进行该检查 。那样的话是不实际的,而且会降低脚本的执行效率 。问题的关键在于找到最有可能出错的代码部分,并且只在那里throw

推荐阅读