怎样处理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参数是错误对象,建议命名为err或error,别用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.ok或response.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分离验证逻辑教程


