怎样处理javascript错误_try…catch语句如何使用【教程】

发布时间 - 2026-01-21 00:00:00    点击率:
try...catch仅对同步错误有效,异步操作需用await+async或.catch(),全局错误和未捕获Promise拒绝须监听window.onerror和unhandledrejection事件。

直接用 try...catch 捕获同步错误没问题,但对异步操作、Promise 拒绝、全局错误或语法错误基本无效——得配合其他机制一起用。

同步代码错误必须用 try...catch 包裹

JavaScript 中只有显式被 try 块包裹的同步执行代码,抛出的错误才能被 catch 捕获。函数调用链中任何一层没包住,错误就直接冒泡到全局。

  • try 块里不能只写函数声明,得是实际执行的表达式(比如 parseJSON(str) 而非 function parseJSON(){...}
  • catch 参数是错误对象,建议命名为 errerror,别用 e——调试时 IDE 提示不友好
  • 不要空 catch:哪怕只是 console.error(err),也比吞掉错误强

Promise 拒绝不能靠 try...catch 自动捕获

下面这段代码看似用了 try...catch,但 fetch 失败时根本进不了 catch 块:

try {
  fetch('/api/data').then(r => r.json());
} catch (err) {
  console.log('这里不会执行');
}

正确做法是:要么链式调用 .catch(),要么用 await 配合 try...catch(前提是函数声明为 async):

  • 链式:fetch(...).then(...).catch(err => {...})
  • async/await:try { const data = await fetch(...).then(r => r.json()); } catch (err) {...}
  • 注意:await 只解包 Promise 的 rejection,不处理网络超时等底层异常,仍需检查 response.okresponse.status

全局错误和未捕获 Promise 拒绝要单独监听

try...catch 对以下两类错误完全无感:

  • 顶层语法错误(如 const a =

    ;
    ),脚本加载阶段就报错,根本跑不到 try
  • 未被 .catch()try...await...catch 处理的 Promise rejection(会触发 unhandledrejection 事件)

补救方式:

  • 监听 window.onerror 捕获同步运行时错误(含脚本加载错误)
  • 监听 window.addEventListener('unhandledrejection', e => {...}) 捕获漏网的 Promise 拒绝
  • 这两处适合做错误上报,但别用来替代局部 try...catch——定位太粗,无法知道具体哪行出问题

真正难处理的不是怎么写 try...catch,而是判断该在哪一层加、加完之后要不要继续 throw、以及如何区分“可恢复错误”和“该崩就崩”的致命错误。这些没法靠语法解决,得看业务上下文。


# javascript  # java  # js  # json  # ai  # win 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python面向对象测试方法_mock解析【教程】  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel如何配置任务调度?(Cron Job示例)  C#如何调用原生C++ COM对象详解  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  如何挑选最适合建站的高性能VPS主机?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  如何在腾讯云服务器上快速搭建个人网站?  如何用低价快速搭建高质量网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  ,在苏州找工作,上哪个网站比较好?  如何在阿里云虚拟主机上快速搭建个人网站?  *服务器网站为何频现安全漏洞?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Laravel如何优化应用性能?(缓存和优化命令)  如何快速查询网站的真实建站时间?  如何打造高效商业网站?建站目的决定转化率  如何在万网开始建站?分步指南解析  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  iOS验证手机号的正则表达式  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  Laravel如何使用Sanctum进行API认证?(SPA实战)  如何快速搭建高效香港服务器网站?  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  如何在阿里云域名上完成建站全流程?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  Python数据仓库与ETL构建实战_Airflow调度流程详解  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel如何实现API速率限制?(Rate Limiting教程)  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何用虚拟主机快速搭建网站?详细步骤解析  微信h5制作网站有哪些,免费微信H5页面制作工具?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel如何为API生成Swagger或OpenAPI文档  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  浅谈redis在项目中的应用  php 三元运算符实例详细介绍  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel如何创建自定义Artisan命令?(代码示例)  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程