You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么console.log打印对象时不展示执行时刻值?两种场景输出为何不同

Chrome控制台两段代码输出差异的原因

核心原因

该差异是Chrome DevTools控制台对引用类型的**懒求值(延迟求值)**特性导致的。

差异细节解释

  • 代码片段1执行顺序:创建对象 → 给对象添加name属性 → 打印对象
    打印执行时,对象已经存在name属性,所以控制台的预览行、展开后的属性列表都会正常显示name: "John"。
  • 代码片段2执行顺序:创建对象 → 打印对象 → 给对象添加name属性
    打印执行时对象是空对象,所以控制台的预览行显示{}。但Chrome控制台打印引用类型时不会立刻固化对象的所有属性快照,只会在用户点击展开对象的折叠箭头时,才会读取对象当前的实时属性值。此时name属性已经被添加完成,所以展开后能看到name: "John",和预览行的内容不一致。

规避方法

如果需要打印对象当前时刻的快照,避免延迟求值带来的不一致,可以在打印时对对象做序列化再反序列化,或者做浅拷贝固化状态:

// 方法1:序列化后反序列化(适用于无特殊类型、无循环引用的普通对象深拷贝)
console.log(JSON.parse(JSON.stringify(obj1)))
// 方法2:浅拷贝(仅适用层级简单、无循环引用的对象)
console.log({...obj1})

内容的提问来源于stack exchange,提问作者anuragp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:54:04