Javascript对象删除-删除另一个对象

时间:2018-08-15 11:51:21

标签: javascript object

我有两个对象:

  var parameters = [{
    id: 1,
    name: "test1"
  }, {
    id: 2,
    name: "test2"
  }];


  var person = {
    name: "Harry",
    parameters: [{
      id: 1
    }, {
      id: 2
    }]
  };

我将person.parameters设置为另一个对象:

person.parameters = parameters;

现在我要从person.parameters中删除一些内容:

delete person.parameters[0].id;

为什么parameter[0].id不再可用?

console.log(parameters[0].id);

结果:

undefined

3 个答案:

答案 0 :(得分:1)

操作时:

person.parameters = parameters;

您只需将数组parameters的引用传递给person.parameter。因此parameterperson.parameter都指向同一参考。因此,其中任何一个所做的更改都会反映在其他方面。

基本上,您的内存中包含以下内容:

a:ref12344−−−+
             |
             |
             |    +−−−−−−−−−−−−−+                 
             +−−−>|  Array      |                 
             |    +−−−−−−−−−−−−−+                 
             |    | obj 1       |         
             |    | obj 2       |
b :ref12345−−+    |             |       
                  |             |
                  +−−−−−−−−−−−−−+

只需对您的数组进行深度复制,即可创建单独的引用:

person.parameters = parameters.map(a => ({...a}));

答案 1 :(得分:0)

因为您已将其分配给内存中的同一对象。如果您不想操作同一对象,则应在将其分配给人员时复制参数。

答案 2 :(得分:0)

  

对象和数组通过引用传递。

在Javascript和几乎每种编程语言中,对象和数组都是通过引用传递的。这意味着当您将它们设置为新变量时,实际上并不会创建将其设置为新变量的副本。相反,它是新变量获得引用的相同的内存数组/对象。而当您将变量设置为原始值(如数字或字符串)时,实际上会得到它的副本。因此,当您修改数组/对象时,代码中已引用该对象的每个变量都将使用其新值进行更新。