try-catch 是 JavaScript 处理运行时异常的核心机制,由 try(包裹可能出错代码)、catch(接收处理 Error 对象)和可选 finally(无论是否出错均执行)组成,支持区分错误类型、配合 async/await 统一处理同步异步错误,并需避免空 catch、合理使用及抛出自定义错误。

在 JavaScript 中,try-catch 是处理运行时异常的核心机制,用于捕获并响应代码执行中可能出现的错误,避免程序意外中断。
基本语法结构
try-catch 由 try 块(包裹可能出错的代码)和 catch 块(接收并处理错误)组成,还可选配 finally 块(无论是否出错都会执行):
try {<br> // 可能抛出错误的代码<br>} catch (error) {<br> // 处理错误,error 是 Error 对象<br>} finally {<br> // 清理工作,如关闭连接、重置状态等<br>}
捕获常见错误类型
JavaScript 运行时错误(如引用未声明变量、调用非函数值、网络请求失败等)会自动抛出 Error 或其子类(如 TypeError、ReferenceError、SyntaxError)。catch 可通过判断 error.constructor.name 或使用 instanceof 区分处理:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
立即学习“Java免费学习笔记(深入)”;
- 检查
error.name:例如error.name === 'TypeError' - 读取
error.message获取具体提示信息 - 注意:
catch不捕获语法错误(发生在解析阶段,非运行时)和 Promise 拒绝(需用.catch()或await...catch)
配合 Promise 使用 async/await
在异步操作中,直接在 await 前加 try-catch 最简洁:
async function fetchData() {<br> try {<br> const res = await fetch('/api/data');<br> if (!res.ok) throw new Error(`HTTP ${res.status}`);<br> return await res.json();<br> } catch (err) {<br> console.error('请求失败:', err.message);<br> return null;<br> }<br>}
这样比链式 .then().catch() 更易读,也支持同步与异步错误统一处理。
注意事项与最佳实践
- 不要空
catch:至少记录错误(console.error(error)),否则会静默丢失问题线索 - 避免过度包裹:只对可能出错且你有能力处理的逻辑使用
try-catch,不是所有代码都需包围 - 可抛出自定义错误:
throw new Error('用户名不能为空'),便于业务层识别和响应 - 嵌套
try-catch时,内层未捕获的错误会向外层冒泡,合理设计层级可提升错误定位效率

















