通过for循环创建对象型数组,为什么数组每一项都是一样的,都是最后一个值

简单的例子:for循环遍历2个数组,分别添加给对象的2个属性,然后将对象添加到新数组,为什么最后新数组每一项都一样??

var arr=[]

var k={}

k.num=0

k.name=''

a=[1,2,3,4]

b=['tom','sun','bob','kiki']

for(i=0;i<4;i++)

{

    k.num=a[i];

    k.name=b[i];

    arr.push(k)

}

console.log(arr)

结果:[{name:'kiki,num:4},{name:'kiki,num:4},{name:'kiki,num:4},{name:'kiki,num:4}]

慕勒3428872
浏览 1845回答 1
1回答

不负相思意

k是一个对象,而且在内存中只有一个,循环中每次对k的属性赋值都在相同的内存空间里进行,所以push到arr中的4个对象都是相同的k对象,且因为最后给k属性赋值为{&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;'kiki', &nbsp;&nbsp;&nbsp;&nbsp;num:&nbsp;4}所以打印出这个效果。可以这么改for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;4;&nbsp;i++){ &nbsp;&nbsp;&nbsp;&nbsp;arr.push({ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&nbsp;:&nbsp;a[i], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;b[i] &nbsp;&nbsp;&nbsp;&nbsp;}) }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript