try...catch 是 JavaScript 处理运行时错误的核心机制,通过 try 执行可能出错代码、catch 捕获异常对象(含 message/name/stack)、finally 保证清理操作执行;需区分错误类型、避免空 catch、慎用一锅端,并结合 async/await 和 Promise.allSettled() 正确处理异步错误。

JavaScript 中的 try...catch 是处理运行时错误的核心机制,它能防止未捕获异常导致脚本中断,让程序更健壮。
try...catch 基本结构与执行逻辑
try 块中放可能出错的代码;一旦抛出异常,JS 立即跳转到 catch 块执行,try 中后续语句不再运行。如果没有异常,catch 块被跳过。
- 必须有
try,catch或finally至少存在一个 -
catch参数(如err)接收 Error 对象,包含message、name、stack等属性 -
finally无论是否出错都会执行,常用于清理操作(如关闭定时器、重置状态)
捕获不同类型的错误
原生错误类型包括 ReferenceError、TypeError、SyntaxError(仅在 eval 中可捕获)、RangeError 等。可通过 err instanceof TypeError 或 err.name === 'TypeError' 进行区分处理。
- 对关键逻辑做细粒度判断:比如 API 调用失败是网络问题(
TypeError)还是后端返回了错误状态(需检查响应体) - 自定义错误可继承
Error类,便于统一识别和日志分类 - 注意:异步代码(如
setTimeout、fetch回调)中的错误无法被外层try...catch捕获,需在异步内部单独处理或使用async/await + try...catch
实际使用中的常见注意事项
不要把整个函数体包进一个 try 块里“一锅端”,这会掩盖具体出错位置,也不利于定位问题。
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
立即学习“Java免费学习笔记(深入)”;
- 只包裹真正可能失败的语句,例如
JSON.parse()、访问深层嵌套对象属性、调用第三方 SDK 方法 - 避免空
catch:至少记录console.error(err)或上报错误,否则异常会被静默吞掉 - 在
catch中不要盲目throw err,除非你要向上冒泡;必要时可包装错误信息再抛出:throw new Error(`解析用户数据失败:${err.message}`)
配合 async/await 处理异步错误
这是现代 JS 错误处理最常用的方式。只要 await 后的 Promise 被 reject,就会被 catch 捕获,写法和同步错误几乎一致。
-
fetch成功响应不代表业务成功,需手动检查response.ok并调用response.json(),后者也可能抛错 - 多个 await 可共用一个 try...catch,但要注意:一旦某个 await 出错,后续 await 不再执行
- 若想并行请求且各自容错,可用
Promise.allSettled()替代Promise.all()









