obj [arr [i]]不等于arr [i]

时间:2013-09-14 12:41:13

标签: javascript arrays object

我正在尝试在对象中存储一些设置。但问题是obj[arr[i]]arr[i]

的值不同
for (var i = 0; i < players.length; i++) {
        if (players[i].volume < 1) players[i].volume = (Math.round((players[i].volume + 0.1) * 10) / 10); // JS math error fix
        settings[players[i]] = settings[players[i]] || players[i];
        settings[players[i]].volume = players[i].volume;
        console.log(settings[players[i]].id + " " + players[i].id + " " + players[i].volume);
    }

console.log将返回此信息:“音乐音乐0”,​​这很好,但接下来它将返回: “音乐演讲0”,而我期望它返回“演讲0”

谁能告诉我我做错了什么?

Fiddle

1 个答案:

答案 0 :(得分:1)

由于players[i]是一个对象,当你执行settings[players[i]]时,它将被转换为字符串以生成数组索引。但是,您的所有对象可能具有相同的toString值,例如"[object Object]"。因此,您的所有player[i]都将存储在settings["[object Object]"]

如果您在调试器中检查settings的值,可以看到此处发生了什么。