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