我有两个对象:
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
答案 0 :(得分:1)
操作时:
person.parameters = parameters;
您只需将数组parameters
的引用传递给person.parameter
。因此parameter
和person.parameter
都指向同一参考。因此,其中任何一个所做的更改都会反映在其他方面。
基本上,您的内存中包含以下内容:
a:ref12344−−−+
|
|
| +−−−−−−−−−−−−−+
+−−−>| Array |
| +−−−−−−−−−−−−−+
| | obj 1 |
| | obj 2 |
b :ref12345−−+ | |
| |
+−−−−−−−−−−−−−+
只需对您的数组进行深度复制,即可创建单独的引用:
person.parameters = parameters.map(a => ({...a}));
答案 1 :(得分:0)
因为您已将其分配给内存中的同一对象。如果您不想操作同一对象,则应在将其分配给人员时复制参数。
答案 2 :(得分:0)
对象和数组通过引用传递。
在Javascript和几乎每种编程语言中,对象和数组都是通过引用传递的。这意味着当您将它们设置为新变量时,实际上并不会创建将其设置为新变量的副本。相反,它是新变量获得引用的相同的内存数组/对象。而当您将变量设置为原始值(如数字或字符串)时,实际上会得到它的副本。因此,当您修改数组/对象时,代码中已引用该对象的每个变量都将使用其新值进行更新。