JavaScript异常处理核心是try...catch...finally:try捕获同步异常,catch需接收error对象并按类型差异化处理,Promise需用.catch()或async/await配合try,finally确保清理逻辑必执行。

JavaScript 中捕获并处理运行时异常,核心是用 try...catch...finally 构建可控的流程分支,让程序在出错时不中断、不静默、有反馈、可恢复。
用 try-catch 拦住同步异常
所有可能抛出运行时错误(如 TypeError、ReferenceError、SyntaxError)的同步代码,都应放在 try 块里。一旦发生异常,执行立即跳转到 catch,后续 try 中的代码不再运行。
-
必须写
catch参数:推荐用catch (error)接收错误对象,便于读取error.name、error.message和error.stack -
避免空 catch:写
catch {}会吞掉错误,不利于调试和监控 -
不要只依赖
console.log:用console.error()让错误在控制台以红色高亮显示
按错误类型做差异化处理
不同异常代表不同问题,统一兜底不如分类响应。利用 instanceof 或 error.name 判断类型:
-
ReferenceError:变量未声明,可提示用户检查拼写或初始化逻辑 -
TypeError:值类型不符(如调用undefined.method()),适合返回默认值或降级行为 -
SyntaxError:JSON 解析失败等,可记录原始字符串用于排查 -
RangeError:数值超限(如递归过深),需限制输入或改用迭代
异步操作不能靠外层 try-catch
普通 try...catch 对 Promise 内部抛出的异常无效。必须用对应方式捕获:
立即学习“Java免费学习笔记(深入)”;
-
Promises:链式调用末尾加
.catch(),或在then的第二个参数中处理 -
async/await:把
await表达式整个包进try块,catch就能捕获拒绝态和同步异常 -
注意陷阱:在
new Promise构造函数里直接throw,不会被外层try捕获,必须在 Promise 内部reject或用.catch()
finally 保证清理动作必执行
finally 不是用来“处理错误”的,而是确保某些逻辑一定运行,比如:
- 关闭模态框、隐藏加载动画
- 释放定时器(
clearTimeout)、取消事件监听 - 关闭 Web Worker 或断开 WebSocket 连接
- 即使
catch中写了return,finally也会先执行



















