让我们考虑以下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"}
为什么会这样?
谢谢:)
答案 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/
有些人可能会将其视为错误,有些则视为优化。这至少是一个边缘实施......