浅拷贝 - 不明白

时间:2017-07-11 15:30:02

标签: javascript arrays deep-copy shallow-copy

最近我在javascript中听到了一些叫做浅层复制的内容。

我了解到 array.slice(0)将返回原始数组的浅表副本(意味着对原始数组所做的更改将反映在重复数组中)..但它不是发生。

original = [1,2];
duplicate = original.slice(); //thinking it as a shallow copy
original.push(3);

现在原始数组有[1,2,3]但重复数组有[1,2]。

据我所知,我认为浅拷贝会反映两个数组的变化,因此两个数组都应该相同。

但如果我喜欢这样,它就会发生:

original = [1,2];
duplicate = original; //thinking it as a deep copy
original.push(3);

那里有没有很好的解释器?

2 个答案:

答案 0 :(得分:0)

.slice()调用会创建一个新数组。它与原始阵列截然不同,两者之间没有持久的关系。因此,在您的第一个代码示例中调用.slice()之后,“复制”数组就是独立的。对原始的更改仅反映在原始数组中。

答案 1 :(得分:0)

浅拷贝只会在数组中应用元素。调用A B C 0 0.02 0.00 0.08 0.08 0.06 0.19 0.18 0.14 0.37 0.31 0.22 0.59 0.47 0.38 0.81 0.72 0.44 0.98 0.84 0.44 后,您将获得一个新数组。将反映对元素的更改,对数组的更改不会。