let obj = {};
console.log(obj);
obj.a = 1;
输入结果如下:

但是,如果你把这个对象展开,将会看到上面存储的a属性,如下:

但是,你会惊奇的发现上面有个感叹号!提示为:This value was evaluated upon first expanding. It may have changed since then,即:此值在第一次展开时计算,从那时起,情况可能发生了变化。也就是在展开的过程中发生了预计算。
什么意思呢??再来看下面这段代码:
let obj = {};
console.log(obj);
console.log(obj.a)
obj.a = 1;
打印结果为:

咦?obj里明明有值,为什么打印obj.a为undefined呢?
其实这就是上面那个感叹号的解释原因,你展开的过程其实做了预计算,而当前并没有a这个值。如果想获取当前真正挂载到window对象上的值,需要JONS.stringify(window),参考https://stackoverflow.com/questions/23429203/weird-behavior-with-objects-console-log
本文探讨了JavaScript中一个有趣的现象:对象在控制台展开时进行预计算导致的显示问题。通过实例说明如何理解控制台输出与实际对象状态之间的差异,并提供了解决方案。
145

被折叠的 条评论
为什么被折叠?



