在javascript编程中,代码执行过程中难免会出现各类异常,比如调用不存在的函数、访问未定义的变量、数据类型不匹配等,这些异常如果未被处理,会直接导致后续代码无法执行,影响整个程序的正常运行。因此掌握错误捕获的方法非常重要,其中try...catch是最常用的错误捕获方式。

javascript错误捕获的基础认知
javascript中的错误分为多种类型,常见的有ReferenceError(引用错误,比如使用了未声明的变量)、TypeError(类型错误,比如对非函数类型的值进行调用)、SyntaxError(语法错误,比如代码写法不符合语法规则)等。大部分运行时错误都可以通过错误捕获机制进行处理,避免程序直接崩溃。
try...catch语句的基本语法
try...catch语句的核心作用是捕获try块中执行的代码抛出的异常,基本结构如下:
try {
// 这里写可能会抛出错误的代码
let result = undefinedVariable + 1; // 访问未声明的变量,会抛出ReferenceError
} catch (error) {
// 这里写错误发生后的处理逻辑
console.log('捕获到错误:', error.message);
} finally {
// 可选部分,无论是否发生错误,这里的代码都会执行
console.log('finally块执行完毕');
}
上述代码中,try块里的代码尝试使用未声明的undefinedVariable,会抛出引用错误,这个错误会被catch块捕获,catch后面的error参数就是抛出的错误对象,我们可以在catch块中对错误进行日志记录、提示用户等操作。finally块是可选的,通常用于释放资源、执行清理操作,不管try块是否出错,finally里的代码都会执行。
catch块中的Error对象属性
catch接收到的错误对象是Error类型的实例,常用的属性有以下几个:
- message:错误的描述信息,比如未定义变量的错误会提示变量未定义
- name:错误的类型名称,比如ReferenceError、TypeError等
- stack:错误的堆栈跟踪信息,方便开发者定位错误发生的位置
我们可以通过这些属性更清晰地了解错误的相关信息,示例代码如下:
try {
let num = "abc";
num(); // 字符串不是函数,会抛出TypeError
} catch (err) {
console.log('错误类型:', err.name);
console.log('错误描述:', err.message);
console.log('堆栈信息:', err.stack);
}
手动抛出错误
除了捕获运行时自动抛出的错误,我们还可以使用throw关键字手动抛出错误,让try...catch捕获我们自定义的错误,示例代码如下:
function divide(a, b) {
try {
if (typeof a !== 'number' || typeof b !== 'number') {
throw new TypeError('参数必须是数字类型');
}
if (b === 0) {
throw new Error('除数不能为0');
}
return a / b;
} catch (error) {
console.log('计算错误:', error.message);
return null;
}
}
console.log(divide(10, 0)); // 捕获除数不为0的错误
console.log(divide(10, "2")); // 捕获参数类型错误
try...catch的使用注意事项
使用try...catch时需要注意以下几点:
- try块中尽量不要写过多的代码,只把可能出现错误的代码放在try块中,这样可以更精准地定位错误来源
- 语法错误(SyntaxError)无法被try...catch捕获,因为语法错误在代码解析阶段就会被发现,程序还没开始执行
- 不要滥用try...catch,对于可以通过逻辑判断避免的错误,优先使用条件判断处理,比如判断变量是否存在再使用,而不是依赖try...catch捕获引用错误
- 异步代码中的错误无法直接用外层的try...catch捕获,因为异步操作的执行时机在try...catch之后,比如下面的代码就无法捕获错误:
try {
setTimeout(() => {
throw new Error('异步错误');
}, 100);
} catch (error) {
// 这里的catch无法捕获到setTimeout里的错误
console.log(error);
}
如果要捕获异步代码中的错误,需要在异步函数内部使用try...catch,或者结合Promise的catch方法处理。
javascript错误捕获try_catch语句异常处理Error对象修改时间:2026-07-20 12:33:24