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

8次阅读

javaScript错误处理必须做,因未处理的undefined、TypeError等会中断脚本并导致ui卡死或数据丢失trycatch仅适用于同步代码且需配合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 中的 componentDidCatchvueerrorCaptured 钩子,或全局 window.onerror,它们补的是 try...catch 捕不到的异步/渲染层错误。没加这些,等于只系了半条安全带。

text=ZqhQzanResources