本文实例讲述了JavaScript错误处理操作。分享给大家供大家参考,具体如下:
良好的错误处理机制可以让用户得到及时的提醒,所以让我们来看看JavaScript提供了哪些针对错误处理的工具和方法吧O (∩_∩) O ~
1 try - catch语句
ecma - 262第3版引入了try - catch语句,这时JavaScript处理异常的标准方式:
尝试{//可能会导致错误的代码 }捕捉(错误){//错误处理 } >之前如果试块中的代码发生了错误,会立即执行catch块的代码。catch块有一个包含错误信息的对象,它有一个消息属性,表示的是浏览器给出的错误消息:
& lt;脚本type=" text/javascript祝辞 尝试{ window.someNonexistenceFunction (); }捕捉(错误){ console.log (error.message); } & lt;/script> >之前消息属性是所有的浏览器都支持的属性,所以在跨浏览器编程中,最好只使用这个属性。
1.1最后子句
最后子句是可选的,如果使用了最后子句,里面包含的代码是绝对会被执行的!甚至连返回语句都无法阻止它被执行:
& lt;脚本type=" text/javascript祝辞 函数testFinally () { 尝试{ 返回2; }捕捉(错误){ 返回1; 最后}{ 返回0; } } console.log (testFinally ());//0 & lt;/script> >之前IE7及更早的版本有一个缺陷:除非有catch子句,否则最后中的代码永远不会被执行! IE8修复了这个bug。
注意:只要在代码中使用了最后子句,那么不管返回放在尝试还是抓住语句中,都会被忽略!
1.2错误类型
当错误发生时,会抛出相应类型的错误对象.ecma - 262定义了7种错误类型:
-
<李> 李>错误
<李> EvalError李>
<李> RangeError李>
<李> ReferenceError李>
<李> SyntaxError李>
<李> TypeError李>
<李> URIError李>
<强> 1.2.1误差强>
错误是基类型,即其他的错误类型都是从错误继承来的。可以利用错误来自定义错误类型。
<强> 1.2.2 EvalError 强>
EvalError是在使用eval()函数发生异常时被抛出。怎么才算是异常呢?如果没有把eval()当作函数来使用,就会抛出EvalError:
引用>新eval();//抛出EvalError eval=foo;//抛出EvalError >之前实际开发中很少这样使用<代码> eval() 代码>函数的(除非脑袋秀逗了O (∩_∩) O ~),所以很少会遇到EvalError。
<强> 1.2.3 RangeError 强>
RangeError会在数值超出规定范围时被抛出。比如在定义数组时,指定了数组不支持的数组项数,就会抛出这个错误:
var item1=new Array(-20);//抛出RangeError var item1=new Array (Number.MAX_VALUE);//抛出RangeError >之前<强> 1.2.4 ReferenceError 强>
找不到对象时,会抛出ReferenceError(这就是浏览器的知名的“对象预期”错误)。一般在访问不存在的变量时,会抛出这个错误:
var obj=x;//x还未被声明,所以抛出ReferenceError >之前<强> 1.2.5 SyntaxError 强>
如果把带着错误语法的字符串传入<代码> eval() 代码>函数时,就会抛出SyntaxError:
eval (“a + + b”);//抛出SyntaxError >之前在<代码> eval() 代码>函数之外的语法错误,会导致JavaScript立即停止执行,所以不会抛出这个错误!
<强> TypeError相对于1.2.6 强>
如果变量中保存着意外的类型,或者访问不存在的方式时,就会抛出。这个错误比较常见:
var o=new 10;//抛出TypeError 警报(真正的“名称”);//抛出TypeError Function.prototype.toString.call("名称");//抛出TypeError >之前如果传递给函数的参数类型与预期类型不符,也会抛出这个错误。
<强> 1.2.7 URIError编写强>
使用<代码> encodeURI() 代码>或者<代码> decodeURI() 代码>时,URI的格式不正确,就会抛出URIError错误。一般很少发生,因为这两个函数有着非常高的容错性O (∩_∩) O ~
JavaScript错误处理操作实例详解