有时候,console.log输出的并非当时想输出的结果,而是运行结束之后的结果。
- 例如,有一个循环向数组添加数据,并输出数组在每一次添加新项的结果:
let a = [];
for(let i=0;i<10;i++){
a.push(i);
console.log(a);
}
控制台输出为:
乍一看输出十分正常,可是当把数组的箭头展开时。
数组内部却并非预料中的一样,而是输出了最后的运行结果。
- 个人的猜想:
在console.log执行的时候,浏览器会对log的对象求一次值,打印出来是 Object ,可以继续展开。但当你展开控制台中的 Object 的时候,浏览器又会对它求一次值,这一次是显示它的属性。所以才会有前后打印的东西不一样的情况发生,因为对象引用的实体的值改变了。 -
如果把 console.log(a) 改为 console.log(JSON.parse(JSON.stringify(a)))
便是刚开始期望的结果。