javascript错误处理怎么做_try catch如何捕获异常
发布时间 - 2026-01-09 00:00:00 点击率:次try catch 仅捕获同步异常,如 throw、ReferenceError、TypeError、SyntaxError;对异步错误、事件处理器错误、Promise 错误无效;需用 .catch() 或 async/await 配合;应记录 e.name 和 e.stack;finally 中抛错会覆盖原错误。
try catch 能捕获哪些错误
它只捕获**同步执行过程中抛出的异常**,比如 throw new Error()、引用未定义变量(ReferenceError)、调用非函数值(TypeError)、JSON 解析失败(SyntaxError)等。但对以下情况完全无效:
- 异步代码里的错误(如
setTimeout、Promise回调、fetch失败) - 事件处理器中抛出的错误(如
onclick里throw) - 语法错误(
SyntaxError)——这类错在解析阶段就报了,根本进不了try块
Promise 中的错误不能靠外层 try catch 捕获
写成这样是徒劳的:
try {
fetch('/api/data').then(res => res.json()).then(data => console.log(data));
} catch (e) {
console.error('这根本不会执行');
}
因为 fetch 立即返回一个 Promise,try 块结束时它还没 resolve 或 reject。正确做法是:
- 用
.catch()链式处理:fetch(...).then(...).catch(e => {...}) - 或用
async/await配合try/c(注意函数必须是
atchasync)
async function loadData() {
try {
const res = await fetch('/api/data');
const data = await res.json();
console.log(data);
} catch (e) {
console.error('网络或解析出错了', e);
}
}
不要忽略 error 对象的细节
很多人只写 catch (e) { console.error(e) },但 e 是个对象,关键信息藏在属性里:
-
e.message:人类可读的错误描述(如"Cannot read property 'x' of undefined") -
e.name:错误类型名("TypeError"、"SyntaxError"),可用于条件判断 -
e.stack:调用栈,定位问题位置最直接的依据 - 某些环境(如 Chrome)还提供
e.cause(链式错误原因)
生产环境建议至少记录 e.name 和 e.stack,光打 e.toString() 会丢掉上下文。
finally 不是万能收尾,别在这里 throw
finally 块总会执行,适合清理资源(如关闭加载状态、清除定时器),但它有两条铁律:
- 如果
finally里throw或返回一个 rejected Promise,它会覆盖前面try或catch中的返回值或错误 - 不要在
finally里做可能失败的操作(比如又发一次fetch),否则可能把原错误“吞掉”
常见误用:
try {
riskyOperation();
} catch (e) {
console.error(e);
throw e; // 原意是重抛
} finally {
await cleanup(); // 如果 cleanup() 抛错,上面的 throw 就被覆盖了
}
真正安全的清理,应该确保自身不抛错,或单独捕获其内部异常。
# javascript
# java
# js
# json
# 处理器
# 栈
# ai
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何处理文件下载请求?(Response示例)
详解jQuery中的事件
googleplay官方入口在哪里_Google Play官方商店快速入口指南
JavaScript常见的五种数组去重的方式
如何打造高效商业网站?建站目的决定转化率
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
,在苏州找工作,上哪个网站比较好?
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
JavaScript如何实现倒计时_时间函数如何精确控制
Linux网络带宽限制_tc配置实践解析【教程】
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
大同网页,大同瑞慈医院官网?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
详解阿里云nginx服务器多站点的配置
奇安信“盘古石”团队突破 iOS 26.1 提权
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
在Oracle关闭情况下如何修改spfile的参数
Laravel如何实现事件和监听器?(Event & Listener实战)
详解MySQL数据库的安装与密码配置
浅析上传头像示例及其注意事项
bing浏览器学术搜索入口_bing学术文献检索地址
浅谈javascript alert和confirm的美化
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
BootStrap整体框架之基础布局组件
中国移动官方网站首页入口 中国移动官网网页登录
如何快速搭建虚拟主机网站?新手必看指南
Bootstrap整体框架之CSS12栅格系统
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何用PHP快速搭建CMS系统?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何用VPS主机快速搭建个人网站?
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Laravel如何实现文件上传和存储?(本地与S3配置)
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Laravel如何与Pusher实现实时通信?(WebSocket示例)


atch