JavaScript中console.log提前显示对象后续新增属性问题咨询
问题原因
这个现象是浏览器开发者工具console.log的惰性求值(延迟求值)特性导致的:
- 当你调用
console.log()输出引用类型(比如对象、数组)时,浏览器并不会立即将该对象当前的状态做快照存储,而是仅存储对象在内存中的引用地址。 - 你在控制台点击展开该对象的预览时,开发者工具才会真正去读取该引用指向的内存中最新的对象状态,这时候代码中后续给对象追加
extra属性的逻辑已经执行完毕,所以展开后会看到包含后续添加的属性。
验证方案
你可以通过以下两种方式打印对象的即时快照,避免这个问题:
- 序列化后打印,直接输出执行打印时的对象状态字符串:
console.log(JSON.stringify(testarray))
- 打印浅拷贝后的新对象,切断和原对象的引用关联:
console.log({...testarray})
内容的提问来源于stack exchange,提问作者nhatimme
相关产品推荐
相关产品推荐

