5

次のJavaScriptスニペットを考えてみましょう

var arr = [];
function pushMe()
{
      var temp = { "name": "me" };
      arr.push(temp)
      console.log(arr)
      temp["name"] = "you";
      arr.push(temp)
      console.log(arr)
}

私は出力を次のように見て驚いた[Object { name="you"},Object { name="you"}]

参照をプッシュしているので、両方が同じオブジェクトを参照する必要があります。しかし、少なくとも最初のプッシュ出力の後は、Object { name="me"}

なぜこうなった??

ありがとう :)

4

1 に答える 1

6

Chromeのコンソールの問題は、渡されたオブジェクトがChromeにコピーされないことです。

Chromeがコンソールを構築するまでに、表示されるオブジェクトは変更されています。

あなたの「私」を見たいのなら、これを試してみてください:

  var arr = [];
  var temp = { "name": "me" };
  arr.push(temp)
  console.log(arr)
  setTimeout(function(){
      temp["name"] = "you";
      arr.push(temp)
      console.log(arr)
  }, 3000);

3秒以内にアレイの内部を確認します。

フィドル: http: //jsfiddle.net/TMDq2/

バグと見なす人もいれば、最適化と見なす人もいます。それは少なくとも境界線の実装です...

于 2012-12-07T16:25:55.907 に答える