js实战中如何排除代码中的bug错误
1 术语与 JS 错误完整分类1.1 三大基础错误类型1.1.1 语法错误 SyntaxError代码书写不符合 ES 语法标准解析阶段直接阻塞执行代码完全不运行。 常见诱因少括号、少分号、引号不匹配、关键字误用、解构语法书写错误。1.1.2 引用 / 类型运行时错误 ReferenceError / TypeError语法合法但执行时变量、对象、方法不存在或调用方式非法执行中断。 高频场景访问未定义变量、null/undefined调用属性、基本类型调用数组方法、函数传参类型不匹配。1.1.3 逻辑 Bug无报错但结果不符合预期无控制台报错、无程序崩溃仅业务计算、渲染、判断逻辑出错是项目中最难排查的一类 Bug。 例如判断条件写反、循环边界错误、异步顺序错乱、深浅拷贝修改原数据。1.2 其他细分错误RangeError数值超出合法范围数组长度负数、递归死循环URIErrorURL 编解码参数非法EvalErroreval 执行异常极少出现异步隐性错误Promise 未捕获异常、定时器变量作用域污染环境类错误跨域 CORS、接口返回数据格式异常、兼容性报错2 原生调试工具完整使用DevTools 核心能力2.1 浏览器 DevTools Sources 面板核心排错工具2.1.1 断点调试 Breakpoint普通行断点点击代码行号代码执行到该行自动暂停查看当前所有变量、作用域。条件断点右键行号 → Add conditional breakpoint仅表达式为 true 时暂停适合循环内精准定位异常数据。javascript运行// 示例仅当 id0 时断点暂停 const list [{id:0},{id:1},{id:2}] list.forEach(item { // 条件断点填写 item.id 0 console.log(item) })DOM 断点Elements 面板右键元素监听元素属性修改、子节点变更定位渲染异常。XHR/Fetch 断点Network 面板勾选 XHR/fetch Breakpoints拦截所有接口请求查看入参、返回值。2.1.2 调试控制按钮Resume放行至下一个断点Step over逐行执行跳过函数内部Step into进入当前调用函数内部Step out跳出当前函数Watch 监视面板自定义表达式实时观测变量变化无需反复 console.log2.1.3 控制台 Console 调试 API替代简易打印javascript运行// 普通打印 console.log(普通日志, data) // 分组打印层级清晰 console.group(用户列表数据) console.table(userList) // 表格格式化数组/对象 console.groupEnd() // 区分错误、警告 console.warn(参数缺失警告) console.error(接口请求失败) // 打印调用栈查看函数执行链路 console.trace(当前调用栈) // 性能打点 console.time(循环耗时) for(let i0;i1000;i){} console.timeEnd(循环耗时)3 各类错误识别、定位、修复实战示例3.1 SyntaxError 语法错误错误示例javascript运行// 引号未闭合 const str 测试文本 // 对象少逗号 const obj { name:小明 age:20 }排查特征控制台直接标红提示行号页面空白 / 脚本完全失效。修复方案根据控制台提示行号检查引号、括号、大括号配对VSCode 开启 ESLint编码阶段实时标红语法问题。3.2 ReferenceError 引用错误错误示例javascript运行function getUser() { const name 张三 } console.log(name) // name 仅函数内作用域外部无法访问排查特征xxx is not defined变量作用域混淆、变量未声明。修复方案区分var/let/const块级作用域全局变量挂载 window局部变量提升规则排查。3.3 TypeError 类型错误项目最高频 Bug场景 1undefined/null 读取属性javascript运行const res null console.log(res.name) // Cannot read properties of null (reading name)修复可选链操作符?.做空值防护javascript运行console.log(res?.name)场景 2基础类型调用数组方法javascript运行const data 123 data.map(item item) // map is not a function修复先判断数据类型Array.isArray(data)再执行数组方法。3.4 逻辑无报错 Bug 排查流程使用console.table打印完整数据源确认接口返回数据是否符合预期条件断点锁定异常数据条目Watch 面板监听判断表达式确认布尔值是否与预期相反拆解复杂判断拆分多段if分步打印中间值。逻辑错误示例javascript运行// 需求过滤年龄大于18的用户条件写反 const users [{age:16},{age:20}] const adult users.filter(item item.age 18)排查Watch 输入item.age 18观察布尔值快速发现条件逻辑颠倒。3.5 RangeError 范围错误javascript运行new Array(-1) // Invalid array length // 递归死循环 function loop(){ loop() } loop()修复校验数组长度为非负数、递归增加终止条件。4 编码层主动防御提前规避 Bug工程规范4.1 空值安全防护统一使用 ES6 可选链、空值合并杜绝空对象报错javascript运行// 推荐 const city user?.address?.city ?? 未知 // 不推荐 const city user.address.city4.2 强类型校验接口返回数据先校验类型再执行业务逻辑javascript运行function renderList(list) { if(!Array.isArray(list)) { console.error(列表数据必须为数组, list) return [] } return list.map(item item.name) }4.3统一异常捕获规范同步代码 try/catchjavascript运行function parseJson(str) { try { return JSON.parse(str) } catch(err) { console.error(JSON解析失败, err) return null } }Promise 异步捕获javascript运行// 方案1catch 链 fetch(/api/list) .then(res res.json()) .catch(err console.error(接口异常, err)) // 方案2async/await try catch async function getList() { try { const res await fetch(/api/list) return res.json() } catch(err) { // 统一异常处理 } }5 高频复杂场景专项排错指南5.1 异步 Bug定时器、Promise、async 时序错乱问题代码javascript运行for(var i0;i3;i){ setTimeout((){ console.log(i) // 全部输出3 },100) }排查手段断点进入定时器回调Watch 观测 i 值修复使用 let 块级作用域保存循环变量。5.2 深浅拷贝修改原数据 Bug现象修改新对象原始数组 / 对象同步变化 排查打印两个对象引用地址对比 修复简单结构用扩展运算符、复杂结构结构化深拷贝。5.3 闭包变量污染特征多次调用函数数据互相干扰 排查console.trace 打印闭包执行栈观测自由变量。5.4 跨域 CORS 报错特征控制台 Network 报红色提示 Access-Control-Allow-Origin 区分前端代理跨域、后端配置跨域、JSONP 三种解决方案。5.5 渲染界面数据不同步Vue/React特征控制台数据正常页面不更新 排查断点监听响应式数据变更检查赋值方式、响应式规则。6 线上生产环境错误捕获与定位6.1 全局页面异常捕获javascript运行// 捕获同步全局错误 window.onerror function(message, source, line, column, err) { // 上报错误日志服务 console.log(全局异常, {message, source, line}) } // 捕获未处理Promise异常 window.addEventListener(unhandledrejection, e { console.log(异步Promise未捕获错误, e.reason) })6.2 生产环境源码定位项目打包后代码压缩混淆需上传 sourcemap通过错误行号还原原始源码6.3 第三方监控工具Sentry、Fundebug 自动捕获线上报错、携带用户设备、接口参数、堆栈信息快速复现线上 Bug。7 标准化排错流程通用工作流收集错误信息复制控制台完整报错堆栈、接口返回数据、复现操作步骤区分错误大类语法错误 / 运行时异常 / 无报错逻辑 Bug缩小范围注释一半代码二分法定位出错代码块工具断点精准定位条件断点、XHR 断点、console.table 打印数据源复现最小 Demo抽离出错代码单独运行排除外部环境干扰修复并增加防御代码空值判断、类型校验、try/catch补充单元测试针对该 Bug 编写测试用例防止迭代回归。

相关新闻

Kimi K2「实时协同编辑」功能上线倒计时:仅开放前500家企业内测资格,申请通道今晚24点关闭

Kimi K2「实时协同编辑」功能上线倒计时:仅开放前500家企业内测资格,申请通道今晚24点关闭

更多请点击: https://codechina.net 第一章:Kimi K2「实时协同编辑」功能上线倒计时与内测准入机制 Kimi K2 即将正式推出备受期待的「实时协同编辑」功能,该能力基于自研的分布式一致性协议与低延迟同步引擎构建,支持毫秒级光标…

2026/10/20 0:08:59 阅读更多 →
金额用 Long 还是 BigDecimal?

金额用 Long 还是 BigDecimal?

大家好,我是Java1234_小锋老师。做支付、电商、财务系统时,金额字段到底该怎么存?这篇文章用大白话讲清楚,并附上可直接参考的代码。先说结论场景推荐方案高并发交易、订单、余额Long(以「分」为单位)财务核…

2026/10/20 14:37:11 阅读更多 →
kableExtra新手教程:如何为学术论文创建符合期刊要求的表格

kableExtra新手教程:如何为学术论文创建符合期刊要求的表格

kableExtra新手教程:如何为学术论文创建符合期刊要求的表格 【免费下载链接】kableExtra Construct Complex Table with knitr::kable() pipe. 项目地址: https://gitcode.com/gh_mirrors/ka/kableExtra 在R语言数据分析的世界中,创建符合学术期…

2026/10/19 23:23:20 阅读更多 →

最新新闻

Apple Silicon 虚拟机 EFI_RNG_PROTOCOL 缺失排查

Apple Silicon 虚拟机 EFI_RNG_PROTOCOL 缺失排查

前两天我在一台 M2 的 Mac mini 上用 VMware Fusion 装 Ubuntu 22.04 ARM 版,系统安装完重启,屏幕刷过一长串启动日志,其中一行EFI_RNG_PROTOCOL unavailable特别扎眼。第一反应就是“启动失败了”。结果等了几秒,系统照常进到了登…

2026/10/20 15:10:51 阅读更多 →
LangGraph代理零信任安全实践:从JWT到动态凭证的完整落地

LangGraph代理零信任安全实践:从JWT到动态凭证的完整落地

1. 代理时代的信任危机:传统安全边界为什么全面失效1.1 一次工具凭证泄漏事故的完整复盘我接手过一个LangGraph代理项目,功能不复杂:把内部文档检索、外部工具调用和自然语言问答串在一起。上线前我做了所有“看起来正确”的事——在网关限制…

2026/10/20 15:10:51 阅读更多 →
vsping:一条命令批量检测VPS节点延迟、丢包和端口连通性

vsping:一条命令批量检测VPS节点延迟、丢包和端口连通性

提到 vsping,很多常跟服务器打交道的人应该不陌生。它是个命令行下的网络测试工具,核心功能就是批量检测一组 VPS 节点的延迟、丢包和端口连通性。我第一次见它,是在某个技术社群的闲聊里,有人贴了一张表格,里面整整齐…

2026/10/20 15:10:51 阅读更多 →
SolidWorks拉伸凸台全解析:从草图到实体建模的核心命令

SolidWorks拉伸凸台全解析:从草图到实体建模的核心命令

很多刚接触SolidWorks的朋友,一上来就被界面里密密麻麻的命令按钮吓住了。其实整个软件的学习路径远比想象中线性,你只需要先啃透一个命令——拉伸凸台,后面一大半的建模逻辑都能顺势打通。作为整个SolidWorks体系里最基础、最高频、也是最能…

2026/10/20 15:10:51 阅读更多 →
GitHub前500仓库的Claude Code考古:使用痕迹与渗透率分析

GitHub前500仓库的Claude Code考古:使用痕迹与渗透率分析

GitHub上Star前500的仓库,是整个开源世界的金字塔尖。前阵子我做了一个有点"考古"性质的分析:想搞清楚这些顶尖仓库里,到底有多少真的在用Claude Code。做法不是看网上的讨论热度,而是逐个仓库去翻配置目录、提交历史、…

2026/10/20 15:10:51 阅读更多 →
PySpark与Hadoop图书推荐系统毕设:从环境搭建到答辩全流程

PySpark与Hadoop图书推荐系统毕设:从环境搭建到答辩全流程

计算机毕业设计里,图书推荐系统这个题目几乎年年有人选。它业务场景具体、数据可解释性好、推荐算法能体现技术含量,关键是答辩时老师容易听懂。而一旦在这个题目前面加上 PySpark 和 Hadoop,再配一块可视化大屏,项目定位就从“普…

2026/10/20 15:09:47 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →