什么是错误处理以及如何在javascript中进行它?【教程】

14次阅读

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

什么是错误处理以及如何在 javascript 中进行它?【教程】

JavaScript 中的错误处理不是“要不要做”的问题,而是“不处理就会让整个流程崩掉”——尤其在异步操作、用户输入或外部 API 调用中,undefinedTypeErrorNetworkError 这类错误会直接中断脚本执行,甚至导致 UI 卡死或 数据丢失

什么时候必须用 try……catch

它只对同步代码有效,且仅捕获运行时错误(语法错误无法捕获)。常见于:

  • 解析用户输入的 JSON:JSON.parse(input) 可能抛出 SyntaxError
  • 访问深层嵌套对象属性:user.profile.address.city 中任意一级为 nullundefined 会触发 TypeError
  • 调用可能未定义的方法:maybeFn?.() 是可选链,但若想统一兜底逻辑,仍需 try……catch

fetch 的错误不会自动进 catch

fetch 只在网络完全失败(如离线、DNS 错误)时 reject;HTTP 状态码 404500 仍返回 Response 对象,必须手动检查 response.okresponse.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 捕不到的异步 / 渲染层错误。没加这些,等于只系了半条安全带。

text=ZqhQzanResources