JavaScript 错误处理必须做,因未处理的 undefined、TypeError 等会中断脚本并导致 UI 卡死或数据丢失;try…catch 仅适用于同步代码且需配合 error.stack、错误类型判断及错误边界使用。

JavaScript 中的错误处理不是“要不要做”的问题,而是“不处理就会让整个流程崩掉”——尤其在异步操作、用户输入或外部 API 调用中,undefined、TypeError、NetworkError 这类错误会直接中断脚本执行,甚至导致 UI 卡死或 数据丢失。
什么时候必须用 try……catch
它只对同步代码有效,且仅捕获运行时错误(语法错误无法捕获)。常见于:
- 解析用户输入的 JSON:
JSON.parse(input)可能抛出SyntaxError - 访问深层嵌套对象属性:
user.profile.address.city中任意一级为null或undefined会触发TypeError - 调用可能未定义的方法:
maybeFn?.()是可选链,但若想统一兜底逻辑,仍需try……catch
fetch 的错误不会自动进 catch
fetch 只在网络完全失败(如离线、DNS 错误)时 reject;HTTP 状态码 如 404 或 500 仍返回 Response 对象,必须手动检查 response.ok 或 response.status:
fetch('/api/data') .then(response => {if (!response.ok) {throw new Error(`HTTP error: ${response.status}`); } return response.json();}) .catch(err => console.error('请求失败:', err.message));
不要忽略 error.stack 和错误类型判断
仅打印 err.message 会让调试变得困难。真实项目中应区分错误来源:
立即学习“Java 免费学习笔记(深入)”;
- 用
err instanceof TypeError判断是否为类型错误 - 用
err.name === 'AbortError'区分主动取消的请求 - 日志中保留
err.stack,它能定位到具体哪一行抛出异常 - 避免写
catch (e) {/* 忽略 */}—— 静默吞错是线上故障最常见的温床
最常被跳过的其实是错误边界:React 中的 componentDidCatch、Vue 的 errorCaptured 钩子,或全局 window.onerror,它们补的是 try……catch 捕不到的异步 / 渲染层错误。没加这些,等于只系了半条安全带。






























