我们想要的结果是[{num:1},{num:2},{num:3}];但是我们做循环的时候得到的结果是[{num:3},{num:3},{num:3}];接下来我们看一下代码
var arr = []
var obj = {}
for (var i = 0; i < 3; i++) {
obj.num= i + 1
arr.push(obj)
}
console.log(arr) //[{ num: 3 },{ num: 3 },{ num: 3 }]
原因:每次取出来的值都放在了obj.age中,因为是在外面定义的对象,所以obj的地址是一样的,arr中保存的是obj的地址,当最后一次给obj.age赋值的时候,由于是同一个obj,所以最后一次给obj.age赋值的后会把之前的值覆盖掉。
解决方式很简单,就是把对象定义到循环里面。
var arr = []
for (var i = 0; i < 3; i++) {
var obj = {}
obj.num= i + 1
arr.push(obj)
}
console.log(arr) //[{ num: 1 },{ num: 2 },{ num: 3 }]