为什么为不同的对象指定相同的值

Why different objects are assigned the same value?

本文关键字:对象 为什么      更新时间:2023-09-26

为什么不同的对象plyers[o]和plyers[1]被分配相同的值?虽然应该有1 的差异

var player = {
    'money': 1,
    'increase' : 10
}
var players = [];

for (var i=0;i<2;i++){
    players[i] = player;
}
for (var i=0;i<3;i++){
    for (var j=0;j<players.length;j++){
        players[j]['money'] += (players[j]['increase']+j)
        console.log(players[0].money + ' ___0')
        console.log(players[1].money + ' ___1')
    }
}

控制台:

11 ___0 
11 ___1 
22 ___0 
22 ___1 
32 ___0 
32 ___1 

进行时

players[i] = player;

您不是在创建player的副本并将其分配给players[i],而是使players[i]引用player对象。因此,数组的所有元素都指向同一个对象。

你可能想做的是克隆对象,比如这个

players[i] = JSON.parse(JSON.stringify(player));

注意:只有当对象中没有函数并且没有继承链时,我提到的克隆方法才能正常工作。您可以按照这个问题来了解有关克隆JavaScript对象的其他方法的更多信息。