一个程序通常有3种类型的异常,分别为“语法异常”、“运行时的异常”和“逻辑异常”,其中“语法异常”通常是在程序员输入一些编译器无法识别的代码后发生的;“运行时的异常”通常是在运行时碰到一个错误时发生的,它与“语法异常”的区别在于它不一定是JavaScript语言的错误引发的异常;“逻辑异常”往往发生在程序设计时,程序没有按照预先设计的方式运行。
触发onerror事件是最早用于处理JavaScript异常的机制,页面出现异常时,将触发onerror事件,该事件在window对象上触发。
<script language="javascript">
window.onerror=function(){ alert("您调用的函数不存在"); return true; }
</script>
参数说明: window.onerror:触发onerror事件。 除了window对象可以触发onerror事件之外,图像对象也可以触发onerror事件。
<script language="javascript">
document.images[0].onerror=function(){ somestatements; return true; }
</script>
参数说明: document.images[0]:页面中的第一个图像。
使用onerror事件处理异常除了可以捕捉异常之外,还可以提供如下3种信息来确定发生异常的详细信息。
异常信息:获取异常信息。
URL:获取发生异常的文件的绝对路径。
行号:给定发生异常文件的行号。
<script language="javascript">
window.onerror=function(ms,Url,Line){ alert("您调用的函数不存在 "+ms+" "+Url+" "+Line+" "); return true; }
</script>
参数说明: window.onerror:window对象触发onerror事件。
使用try…catch语句处理异常:
JavaScript中从Java语言中引入了try...catch...finally功能,具体语法如下。
<script language="javascript">
try{
somestatements; }
catch(exception e){
somestatements; }
finally{ somestatements; }
</script>
参数说明: try:捕捉异常关键字。 catch:捕捉异常关键字。 finally:最终一定会被处理的区块的关键字。
1.嵌套try...catch语句 如果在catch区域中也发生了异常,可以在catch区域中再使用一组try...catch语句,即嵌套使用try...catch语句。
<script language="javascript">
try{
somestatements; }
catch(exception){
try{ somestatments; }
catch(exception){
somestatments; } }
finally{ somestatements; }
</script>
参数说明: try:捕捉异常关键字。 catch:捕捉异常关键字。 finally:最终一定会被处理的区块的关键字。
2.Error对象 try...catch...finally语句中catch通常捕捉到的对象为Error对象,Error类是所有用于抛出异常的类的基类,类似于Java语言中的用于抛出异常的基类Exception类,JavaScript中用于抛出异常的类如表所示。
JavaScript中用于抛出异常的类
类 发生异常的原因
EvalError 错误发生在eval()函数中
RangeError 数字的值超出了JavaScript可表示的范围
ReferenceError 使用了非法的引用
TypeError 变量的类型错误
URIError 在encodeURI()函数或者decodeURI()函数中发生错误
Error对象有以下两个特性: name:表示异常类型的字符串。 message:实际的异常信息。
3.使用throw语句抛出异常
在程序中使用throw语句可以有目的的抛出异常。
<script language="javascript">
throw new Error("somestatements");
</script>
参数说明: throw:抛出异常关键字。 也可以使用throw语句抛出Error对象子类的对象。
<script language="javascript">
throw new TypeError("somestatements");
</script>