JavaScript中try...catch错误处理机制详解
本文详细解析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处理函数使用不当。
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
