Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新时,全局JS对象的旧值会更改_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 更新时,全局JS对象的旧值会更改

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

我有一个全局Javascript对象,我为它设置了一些值并推送到一个数组。一旦我将其推送到数组并更新其值,它就会更改数组中已推送的值。 例如:

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)
 
}
我想了解为什么会发生这种情况,以及如何避免这种情况发生。我希望能够将两个具有不同值的不同对象推送到数组中。只有通过创建另一个对象才能做到这一点吗

我想知道为什么会这样

您创建了一个对象。你把它推到了一个数组中。你修改了那个物体。你又把它推到了数组中

只有通过创建另一个对象才能做到这一点吗


对。如果需要两个不同的对象,则必须创建两个不同的对象。

因为它是同一个对象。您正在推送对对象的引用。您不是每次推送时都要复制它。“我希望能够将两个具有不同值的不同对象推送到数组中。唯一的方法是创建另一个对象吗?”-听起来您已经回答了自己的问题。想想你刚才所说的语义学…如果我想有两个对象,我需要创建两个对象吗?对