我认为我的问题已经回答,但我找不到能让我满意的答案。
问题在于;
代码打印" 3"但我不明白它怎么可能因为首先是人员分配列表[0]然后我实现person.ID所以javascript的专业确实提供了这个。你可以解释我
var person = {};
person.name = "John";
person.surname = "Connor";
var list = [];
list [0] = person; //In here i did not generate ID
person.ID = 3;
console.log(list[0].ID);

答案 0 :(得分:0)
语句list [0] = person;
将对象引用(person)加载到Array的第一个索引中。
因此对对象的任何修改,也会更新列表中的对象,反之亦然。因为对象作为引用传递而不是作为值传递。
这就是为什么在第一个索引的person.ID = 3;
控制台之后还会打印3
。
如果你想避免这种情况,你可以在推入数组之前复制一个对象。
要复制,您可以使用Object.assign({},person)
来制作对象的浅表副本
现在以下代码不会打印3.
var person = {};
person.name = "John";
person.surname = "Connor";
var list = [];
list [0] = Object.assign({},person); //In here i did not generate ID
person.ID = 3;
console.log(list[0].ID);