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 构建控制台时,它显示的对象已经改变。

如果你想看到你的“我”,试试这个:

  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 回答