JavaScript异常捕获核心是try-catch-finally:try包裹可能出错代码,catch接收并处理Error对象(含message/name/stack),finally无论成败均执行,用于资源清理;语法要求try必有,catch与finally至少其一,且catch须在finally前。

JavaScript 中用 try-catch-finally 捕获运行时异常,核心是把可能出错的代码放进 try 块,用 catch 接收错误对象并处理,finally 则无论是否出错都会执行,适合清理资源。
基本语法结构要写全
try 必须存在,catch 和 finally 至少出现其一;三者顺序不能乱,catch 要在 finally 前面。常见写法有三种:
try { ... } catch (err) { ... }try { ... } finally { ... }try { ... } catch (err) { ... } finally { ... }
只写 try 不跟 catch 或 finally 会报语法错误。
catch 中正确访问错误信息
catch 后的参数(如 err)是一个 Error 实例,常用属性有:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
err.message:错误提示文本,比如
"Cannot read property 'name' of undefined" -
err.name:错误类型名,如
"TypeError"、"ReferenceError" - err.stack:调用栈信息,含出错位置,开发调试很有用
注意:ES2019 起允许省略 catch 的参数(即 catch { ... }),但这样就拿不到错误详情,仅适用于只需感知失败、不关心具体原因的场景。
finally 适合做收尾工作
finally 块总会执行,哪怕 try 或 catch 中用了 return、throw 或 break。典型用途包括:
- 关闭打开的文件句柄(Node.js 环境)
- 清除定时器:
clearTimeout(timerId) - 重置加载状态:
loading = false - 释放 DOM 事件监听器(避免内存泄漏)
例如异步请求后确保按钮恢复可用:try { await fetch('/api/data'); } catch (e) { console.error(e); } finally { btn.disabled = false; }
注意异步代码中的陷阱
try-catch 无法直接捕获 Promise 内部的异步错误(如 setTimeout 或未 await 的 Promise 拒绝)。错误会变成未处理的 promise rejection,需额外处理:
- 对 Promise 链使用
.catch()或await ... catch - 监听全局事件:
window.addEventListener('unhandledrejection', ...) - 避免在
try块里只写someAsyncFn().then(...)而不await或接.catch
正确写法示例:try { const res = await fetch('/api'); const data = await res.json(); } catch (err) { /* 处理网络或解析错误 */ }

















