Javascript 浅复制-不理解

Javascript 浅复制-不理解,javascript,arrays,deep-copy,shallow-copy,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] 据我所知,我认为浅拷贝将反映两个数组中的更改,因此两个数组应该是相同

最近我听说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);

有什么好的解释方法吗?

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

浅层副本仅应用阵列中的元素。调用
.slice()
后,您将获得一个新数组。元素的更改将得到反映,而数组的更改则不会得到反映。

浅层副本与别名不同。浅复制只是意味着,如果列表包含引用,则复制的列表将包含与复制对象的引用完全相同的引用。“这意味着对原始数组所做的更改将反映在复制数组中”这是您误解的地方-最好看看您从何处了解到这一点。它应该说的更像是“对原始数组中的项所做的更改将反映在重复数组中”,即如果您有比数字更复杂的内容,并且正在更新对象的属性等。请尝试以下操作:
original=[1,2,[3,4];复制=原始的.slice();原件[2]。推送(5);控制台日志(重复)可能重复的