0

オブジェクトにいくつかの設定を保存しようとしています。ただし、問題は、それ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これを返します:「music music 0」は問題ありませんが、次に「music speech 0」が返されますが、「speech speech 0」が返されると予想していました

誰が私が間違っているのか教えてもらえますか?

フィドル

4

1 に答える 1

1

players[i]はオブジェクトなので、実行settings[players[i]]すると文字列に変換されて配列のインデックスになります。しかし、すべてのオブジェクトはおそらく同じtoString値 ( のようなもの)を持っています"[object Object]"。したがって、すべてplayer[i]の は に保存されsettings["[object Object]"]ます。

settingsデバッガーでの値を調べると、ここで何が起こっているかがわかります。

于 2013-09-14T12:47:50.433 に答える