Javascript 更新时,全局JS对象的旧值会更改
我有一个全局Javascript对象,我为它设置了一些值并推送到一个数组。一旦我将其推送到数组并更新其值,它就会更改数组中已推送的值。 例如:Javascript 更新时,全局JS对象的旧值会更改,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个全局Javascript对象,我为它设置了一些值并推送到一个数组。一旦我将其推送到数组并更新其值,它就会更改数组中已推送的值。 例如: let obj1 = {"name":"", "age":""} //Assume this is declared outside the scope of the below block { obj1.name = "john"; o
let obj1 = {"name":"", "age":""} //Assume this is declared outside the scope of the below block
{
obj1.name = "john";
obj1.age = 21;
arr1.push(obj1);
console.log(arr1) // [{name:"john", age:21}]
obj1.name = "mary"; //Object in array has already changed here
console.log(arr1) // [{name:"mary", age:21}]
obj1.age = 24;
arr1.push(obj1)
}
我想了解为什么会发生这种情况,以及如何避免这种情况发生。我希望能够将两个具有不同值的不同对象推送到数组中。只有通过创建另一个对象才能做到这一点吗
我想知道为什么会这样
您创建了一个对象。你把它推到了一个数组中。你修改了那个物体。你又把它推到了数组中
只有通过创建另一个对象才能做到这一点吗
对。如果需要两个不同的对象,则必须创建两个不同的对象。因为它是同一个对象。您正在推送对对象的引用。您不是每次推送时都要复制它。“我希望能够将两个具有不同值的不同对象推送到数组中。唯一的方法是创建另一个对象吗?”-听起来您已经回答了自己的问题。想想你刚才所说的语义学…如果我想有两个对象,我需要创建两个对象吗?对