JavaScript错误捕获主要靠try...catch,需try块包裹可能出错代码,catch接收Error实例处理,finally无论成败均执行用于清理;它仅捕获同步错误和throw异常,异步错误需在回调或Promise中单独处理。

JavaScript 中的错误捕获主要靠 try...catch 语句,它能让你在代码出错时不直接崩溃,而是有机会处理异常、记录日志或给用户友好提示。
基本结构:try + catch 是标配
必须有 try 块包裹可能出错的代码,catch 块接收错误对象并做处理。没有 try 就不能用 catch。
-
try里放你怀疑会抛错的代码,比如 JSON 解析、API 调用、DOM 操作 -
catch (err)中的err是一个 Error 实例,通常有message、name、stack属性 - 不要只写
catch{},必须带参数,否则无法访问错误信息
可选但推荐:加上 finally 清理资源
finally 块无论是否出错都会执行,适合关掉加载状态、释放定时器、还原 UI 等操作。
- 比如发起请求前显示 loading,
finally里统一隐藏,避免因错误没走catch导致 loading 卡住 -
finally不接收参数,也不影响catch的逻辑 - 即使
try或catch中写了return,finally仍会先执行
进阶技巧:按错误类型分别处理
不是所有错误都该一视同仁。你可以用 instanceof 或检查 err.name 来区分错误来源。
立即学习“Java免费学习笔记(深入)”;
-
SyntaxError:常见于JSON.parse()遇到非法字符串 -
TypeError:调用不存在的方法、读取null的属性等 -
ReferenceError:访问未声明的变量 - 自定义错误可用
err instanceof MyCustomError判断
注意边界:try...catch 捕不到所有错误
它只能捕获同步代码和 throw 出来的错误,对以下情况无效:
- 异步回调里的错误(如
setTimeout、事件监听器),需在回调内部加try...catch - Promise 拒绝(
reject)不会触发catch,要用.catch()或await配合try...catch - 全局错误(如语法错误、资源加载失败)需用
window.onerror或addEventListener('error')
不复杂但容易忽略。写 try...catch 不是为了掩盖问题,而是让错误可控、可追溯、不影响主流程。











