Console.log 在欺骗你:调试陷阱与技巧
许多开发者依赖 console.log 进行调试,但它在显示对象时可能产生误导:控制台打印的是引用而非快照,导致展开时看到的是对象的最新状态。本文剖析了 console.log 的常见陷阱,包括异步日志、引用类型显示错误、以及浏览器控制台的延迟求值机制,并提供实用的替代方案如 console.table、断点调试和结构化克隆来获得真实的调试信息。
背景速读
- JavaScript 的 console.log 在打印对象(Object)和数组(Array)时,显示的其实是该对象的**引用快照**,而非调用瞬间的准确值。如果你在异步代码或循环中调试,展开控制台看到的很可能是变量被修改后的最终状态。
- 常见的陷阱包括:数组在打印后被修改、闭包中引用的变量在回调执行时已经改变、以及浏览器 DevTools 的“延迟求值”机制导致的时间点误导。
- 作者 Gábor Köös 是一名资深前端工程师,长期撰写 JavaScript 与浏览器调试相关的技术文章。这篇博客总结了他多年踩坑的经验。
- 了解这些“骗局”能帮开发者避免浪费数小时追踪根本不存在的 bug,尤其是在处理 React 状态更新、setTimeout、或 Promise 链时。