Console.log输出数组,值并非期望中的值


有时候,console.log输出的并非当时想输出的结果,而是运行结束之后的结果。

  • 例如,有一个循环向数组添加数据,并输出数组在每一次添加新项的结果:
let a = [];
for(let i=0;i<10;i++){
    a.push(i);
    console.log(a);
}

控制台输出为:

控制台输出.png

乍一看输出十分正常,可是当把数组的箭头展开时。

控制台输出.png

数组内部却并非预料中的一样,而是输出了最后的运行结果。

  • 个人的猜想:
    在console.log执行的时候,浏览器会对log的对象求一次值,打印出来是 Object ,可以继续展开。但当你展开控制台中的 Object 的时候,浏览器又会对它求一次值,这一次是显示它的属性。所以才会有前后打印的东西不一样的情况发生,因为对象引用的实体的值改变了。

  • 如果把 console.log(a) 改为 console.log(JSON.parse(JSON.stringify(a)))

    控制台输出.png

    便是刚开始期望的结果。

本文转自 https://www.jianshu.com/p/6db4a08d69af,如有侵权,请联系删除。

原文地址:https://www.cnblogs.com/hustshu/p/15471634.html