javascript中try-catch-finally仅捕获运行时异常(如throw、类型错误、json解析失败),不捕获语法错误;try执行可能出错代码,catch处理error实例(含message/name/stack),finally无论成败均执行,用于资源清理。

JavaScript 中 try-catch-finally 用于主动捕获和处理运行时错误,它不会捕获语法错误(如缺少括号、拼错关键字),只捕获执行阶段抛出的异常(比如 throw、类型错误、引用错误、网络失败等)。
try 块:放可能出错的代码
把不确定是否安全的代码写在 try 里。一旦其中某行抛出异常,JS 立即停止执行后续语句,跳转到 catch 块。
- 不要把大量无关逻辑塞进
try,否则异常位置难定位 - 常见场景:JSON 解析、DOM 操作、异步回调里的同步错误、访问未定义属性
- 示例:JSON.parse('{ "name": "Alice" }') 正常;但 JSON.parse('{ name: "Alice" }') 会触发
SyntaxError并进入catch
catch 块:接收并处理错误对象
catch (err) 中的 err 是一个 Error 实例,包含 message、name、stack 等属性。你可以根据 err.name 做差异化处理。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 常用判断:
err instanceof TypeError、err.name === 'SyntaxError' - 别只打印
err.message,建议保留err.stack便于调试 - 如果不想吞掉错误,可在处理后用
throw err重新抛出
finally 块:无论成功或失败都会执行
finally 适合清理资源,比如关闭定时器、还原 loading 状态、释放锁等。即使 try 或 catch 中有 return,finally 仍会执行。
- 注意:
finally中的return会覆盖try或catch的返回值 - 不推荐在
finally里写业务逻辑,专注“收尾”即可 - 示例:表单提交前设
loading = true,在finally中设回false
注意事项与常见误区
这个结构看似简单,但容易忽略几个关键点:
-
try-catch无法捕获异步错误(如setTimeout、fetch的回调里抛错),需配合async/await + try-catch或.catch() - 不要用它代替条件判断,比如
if (obj && obj.prop)比try { obj.prop }更清晰高效 - 全局未捕获错误可用
window.onerror或window.addEventListener('error')补充监听 - Node.js 中还有
process.on('uncaughtException'),但不推荐依赖它来兜底
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










