javascript与数组的奇怪行为

Nav*_*eth 5 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)
}
Run Code Online (Sandbox Code Playgroud)

我很惊讶地看到输出为 [Object { name="you"},Object { name="you"}]

当我们推送引用时,两者都必须引用相同的对象.但至少在第一次推送输出后必须如此Object { name="me"}

为什么会这样?

谢谢 :)

Den*_*ret 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);
Run Code Online (Sandbox Code Playgroud)

并在不到3秒的时间内查看数组内部.

小提琴:http://jsfiddle.net/TMDq2/

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