请问一下js中在循环中打印出来的数组,这个数组中的值只有最后一层循环的值,这是为什么?

 let data = [];
    for (let i = 0; i < 5; i++) {
        data[0] = i;
        console.log(data);
    }

我想通过上面的循环打印出data,我预想的结果是每次打印出来的data数组中的值是0到5递增,但是最后的结果是打印出来的数组中的值都是4.
请教一下大佬们这是为什么?

不出现你预想的结果是正常的。原因有
第一:data是一个空数组,里面没有任何的值。
第二:你循环的是i不是data,整个语句跟data没有任何关系,所以你输出的data也就没有关系了
第三:你循环的是i,当然输出的时候也应该是i,data只是一个空数组

for(let i = 0; i < 5; i++) { console.log(i); }

试一下这个,你预想结果就会出现了,不过是小于5不是等于5,结果从0-4

没道理啊,那你换成data[i] = i, console.log(data[i])试试

猜测:data[0],data[1],data[2],data[3]... ...
每次循环都将循环的值存在数组data[0]中,这个位置只能存在1个值
现在是一直改变这个值相当于
data[0]=0; -> data[0]=1; -> data[0]=2; -> data[0]=3; -> data[0]=4;
结果:console.log(4)

你这个“都是4”的都是笔误吧?! 这个代码把 for 展开就是

let data = []; data[0] = 0; console.log(data); data[0] =1; console.log(data); .....; data[i] = 4; console.log(data);

很明显结果是 [0], [1], [2], [3], [4] 共5个输出。 如果你看到5个 [4] 的输出, 一般应该是你的运行时提供的控制台显示机制有问题,比如早期版本的 chrome 的 devtools 再显示非基础类型的数据是, 会延迟展开,你点那个展开按钮时,它才去读取对象/数组内部的值,所以读到的不是对应代码刚执行后的值。

你可以把 console.log(data) 改成 console.log(data.join(",")) 试试