《整理javascript捕获异常处理》由会员分享,可在线阅读,更多相关《整理javascript捕获异常处理(5页珍藏版)》请在金锄头文库上搜索。
1、程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(exception handlers) 。如果例外处理代码设计得周全,那么最终呈现给用户的就将是一个友好的界面。否则,就会让访问者对莫名的现象感到真正的“意外” 。本文就将为你介绍 Web 开发中 JavaScript 语言的例外处理技术。一、什么是例外处理当 JavaScript 程序在运行中发生了诸如数组索引越界、类型不匹配或者语法错误时,JavaScript 解释器就会引发例外处理。 ECMAScript 定义了六种类型的错误,除此之外,我们可以使用 Error 对象和 throw 语句来创建并引发自定义的例
2、外处理信息。二、例外处理技术的优点通过运用例外处理技术,我们可以实现用结构化的方式来响应错误事件的发生,让例外处理代码与正常脚本代码科学分离,最终使我们能够集中精力编写完成主要功能的核心程序。三、使用 trycatchfinally 执行例外处理在 JavaScript 中,我们使用 trycatchfinally 语句来执行例外处理,即通过它来捕捉错误发生后导致的例外或者执行 throw 语句产生的例外。它的基本语法如下:try / 此处是可能产生例外的语句 catch(error) / 此处是负责例外处理的语句 finally / 此处是出口语句上述代码中,try 块中的语句首先被执行。如
3、果运行中发生了错误,控制就会转移到位于 catch 块中语句,其中括号中的 error 参数被作为例外变量传递。否则,catch 块的语句被跳过不执行。无论是发生错误时 catch 块中的语句执行完毕,或者没有发生错误 try 块中的语句执行完毕,最后将执行 finally 块中的语句。下面我们来看一个例子:try document.writeln(开始执行 try 块语句 - )document.writeln(还没有发生例外 - )alert(eval(prompt(输入一个值:,) catch(err) document.writeln(捕捉到例外,开始执行 catch 块语句 -);d
4、ocument.writeln(错误名称: + err.name+ - ); document.writeln(错误信息: + err.message+ - ); finally document.writeln(开始执行 finally 块语句)try document.writeln(Beginnng the try block)document.writeln(No exceptions yet)/ Create a syntax erroreval(6 + * 3)document.writeln(Finished the try block with no exceptions) c
5、atch(err) document.writeln(Exception caught, executing the catch block)document.writeln(Error name: + err.name)document.writeln(Error message: + err.message)document.writeln(Executing after the try-catch statement)四、例外的表现形式:Error 对象在 JavaScript, 例外是作为 Error 对象出现的。Error 对象有两个属性:name 属性表示例外的类型,message
6、 属性表示例外的含义。根据这些属性的取值,我们可以决定处理例外的方式,比如:function evalText() try alert(eval(prompt(Enter JavaScript to evaluate:,) catch(err) if(err.name = SyntaxError)alert(Invalid expression)else alert(Cannot evaluate)上面的代码将对用户输入的内容进行表达式求值,然后显示出来。如果在求值过程中发生了 SyntaxErroe 类型错误,那么就会显示给用户 “Invalid expression”的信息;否则,用户得到
7、信息“Cannot evaluate”。Error.name 的取值一共有六种,如下:EvalError:eval() 的使用与定义不一致RangeError:数值越界ReferenceError:非法或不能识别的引用数值SyntaxError:发生语法解析错误TypeError:操作数类型错误URIError:URI 处理函数使用不当五、定制例外信息上述的六种 Error 类型基本上覆盖了脚本程序运行时所可能发生的错误。除了这些类型以外,我们还可以使用 Error 构造器来自定义例外类型,其语法如下:myError = new Error(msg)其中 msg 参数表示所定义的新例外的 me
8、ssage 属性值。同时,我们还可以创建新的对象类型以作为 Error 的子类型:function MyError(msg) this.name = MyErrorthis.message = msgMyError.prototype = new Error;然后,我们就可以创建自定义错误子类的实例:myError = new MyError(My error message)六、触发例外创建一个 Error 对象后,就可以使用 throw 语句来触发相应的例外。Throw 的语法如下:throw errObjerrObj 必须是一个 Error 对象或者 Error 的子类型。在 try 块
9、代码中触发一个例外后,控制将直接转入 catch 块。下面的代码中,在 try 块中触发了一个例外,设置例外信息为“oops” ,然后控制转移到catch 块:var stry s = one throw new Error(oops)s += two catch(err) s += err.messages += threealert(s)编写代码来触发例外的优点很多,比如有利于自定义错误类型,快速转入 catch 块执行,以及下面要介绍的在嵌套例外中将错误传递到外层。七、嵌套例外处理JavaScript 支持多层次的嵌套例外处理。一般情况下,我们可以在内部例外处理的catch 代码块中捕捉
10、并处理错误,然后再次触发例外,这样就可进一步在外部例外处理的catch 代码块中做更加深入的处理。下面来看看一个嵌套例外处理的例子:var inner;var outer;try document.writeln(Beginning outer try block, no exceptions yet);trydocument.writeln(Beginning inner try block, no exceptions yet);/ 生成一个引用错误document.writeln(undefinedVariable)document.writeln(Finished inner try
11、block with no exceptions); catch(inner) / 内部例外处理document.writeln(Exception caught, beginning inner catch block);document.writeln(Error type: + inner.name);document.writeln(Error message: + inner.message);throw inner;document.writeln(No exceptions thrown in inner catch block); finally document.writel
12、n(Executing inner finally block);document.writeln(Finished outer try block with no exceptions); catch(outer) / 外部例外处理document.writeln(Exception caught, beginning outer catch block);document.writeln(Error type: + outer.name);document.writeln(Error message: + outer.message); finally document.writeln(E
13、xecuting outer finally block);执行后的输出结果如下:Beginning outer try block, no exceptions yetBeginning inner try block, no exceptions yetException caught, beginning inner catch blockError type: ReferenceErrorError message: undefinedVariable is not definedExecuting inner finally blockException caught, beginn
14、ing outer catch blockError type: ReferenceErrorError message: undefinedVariable is not definedExecuting outer finally block嵌套例外处理的好处在于使我们能够很好地分阶段处理错误,内部例外处理可以负责解决由错误引发的脚本代码问题,外部例外处理则用于负责提供给用户的反馈信息或者对例外信息进行日志记录。八、结语本文详细讨论了 JavaScript 语言的一个很重要的特征“ 例外处理”,Web 开发人员应该很好地掌握它并在实际应用中灵活处理,从而使包含脚本代码的 HTML 页面真正地不出例外、善解人意。