JavaScript中try...catch错误处理机制详解

作者:异步漫步

时间:2026-10-29

浏览:489

本文详细解析JavaScript中的try...catch错误处理机制,涵盖基本语法、finally块的作用及throw语句的使用。通过对比addEventListener与attachEvent的事件绑定差异,结合嵌套异常处理的实例,深入讲解Error.name的六种类型,帮助开发者掌握前端代码中的异常捕获与处理技巧。

文章目录

事件绑定机制对比

首先通过一个具体实例来理解相关概念。


<input id='b1' type='button' value='按钮'/>
<script>
window.onload=function(){
var oBtn=document.getElementById("b1");
function mto(){
alert("123");
};

try //非IE
{
oBtn.attachEvent("onclick",mto,false);

}
catch(e)//IE
{
oBtn.addEventListener("click",mto,false);
}
};
</script>

需要特别注意以下几点:

addEventListener与attachEvent在第一个参数上存在区别:前者使用click,而后者使用onclick。

addEventListener绑定的事件处理函数在其所属元素的作用域内运行。

attachEvent绑定的事件处理函数则在全局作用域中运行(此时this指向window)。

try...catch基础语法

Try...Catch 语句

try...catch用于测试代码中可能出现的错误。try部分包含需要执行的代码,而catch部分包含当错误发生时执行的代码。语法如下:


try
{
//在此运行代码
}
catch(err)
{
//在此处理错误
}

注意:try...catch必须使用小写字母,使用大写字母会导致错误。

try...catch...finally完整结构

try...catch...finally 语句用于为JScript实现错误处理。


  try  {  
     tryStatements}  
  catch(exception){  
     catchStatements}  
  finally  {  
     finallyStatements}  

   =============   

参数说明

tryStatement:必选项,指可能发生错误的语句。exception:必选项,指任意变量名,其初始值为抛出的错误值。catchStatement:可选项,指处理在相关联的tryStatement中发生的错误的语句。finallyStatements:可选项,指在所有其他过程发生之后无条件执行的语句。

说明

try...catch...finally语句提供了一种处理给定代码块中某些或全部错误的方法,同时保持代码继续运行。如果发生程序员未处理的错误,JScript仅向用户提供其普通错误信息,就像没有错误处理一样。

tryStatements参数包含可能发生错误的代码,而catchStatement则包含处理任何已发生错误的代码。如果在tryStatements中发生错误,程序控制将传递给catchStatements进行处理。exception的初始值是发生在tryStatements中的错误值。如果未发生错误,则不执行catchStatements。

如果在与发生错误的tryStatements相关联的catchStatements中无法处理该错误,则使用throw语句来传播或重新抛出该错误给更高级的错误处理程序。

在执行完tryStatements中的语句,并在catchStatements的所有错误处理发生后,可无条件执行finallyStatements中的语句。

请注意,即使在try或catch块中返回语句,或在catch块重新抛出错误,仍然会执行finallyStatements代码。通常确保finallyStatements的运行,除非存在未处理的错误(例如,在catch块中发生运行时错误)。

嵌套异常处理示例

示例

下面的例子阐明了JScript特例处理是如何进行的。


  try  {  
    print("Outer  try  running..");  
    try  {  
      print("Nested  try  running...");  
      throw  "an  error";  
    }  
    catch(e)  {  
      print("Nested  catch  caught  "  +  e);  
      throw  e  +  "  re-thrown";  
    }  
    finally  {  
      print("Nested  finally  is  running...");  
    }     
  }  
  catch(e)  {  
    print("Outer  catch  caught  "  +  e);  
  }  
  finally  {  
    print("Outer  finally  running");  
  }  
  //  Windows  Script  Host  作出该修改从而得出  WScript.Echo(s)  
  function  print(s){  
     document.write(s);  
  }  

将得出以下结果:

Outer try running.. Nested try running... Nested catch caught an error Nested finally is running... Outer catch caught an error re-thrown Outer finally running

错误对象与Error.name详解

如下是Javascript的例外处理的一个实例。


var array = null;
try {
  document.write(array[0]);
} catch(err) {
  document.writeln("Error name: " + err.name + "");
  document.writeln("Error message: " + err.message);
}
finally{
  alert("object is null");
}

程序执行过程

1. 当访问array[0]时,由于array数组尚未创建,array是一个空对象,程序中调用array[0]就会产生object is null的异常。2. catch(err)语句捕获到这个异常,通过err.name打印了错误类型,err.message打印了错误的详细信息。3. finally类似于java的finally,无论有无异常都会执行。

现总结Error.name的六种值对应的信息:

1. EvalError:eval()的使用与定义不一致。2. RangeError:数值越界。3. ReferenceError:非法或不能识别的引用数值。4. SyntaxError:发生语法解析错误。5. TypeError:操作数类型错误。6. URIError:URI处理函数使用不当。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章