javascript与数组的奇怪行为

时间:2012-12-07 16:23:46

标签: javascript arrays

让我们考虑以下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"}

为什么会这样?

谢谢:)

1 个答案:

答案 0 :(得分: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/

有些人可能会将其视为错误,有些则视为优化。这至少是一个边缘实施......