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 捕不到的异步/渲染层错误。没加这些,等于只系了半条安全带。











