浅表副本中的引用是否会影响原始副本对新副本的更改?

时间:2020-04-17 17:12:07

标签: javascript arrays object deep-copy shallow-copy

我试图了解浅表副本,深层副本和赋值运算符之间的区别。诸如thisthis之类的冲突文章使混乱更加复杂。据我了解,理解这两个概念的关键是引用,无论是复制实际值还是仅复制值的引用。

第一篇文章将“一个级别”和“嵌套”区分开来,称“浅表副本是指仅复制一个级别的事实”,而深表副本是“包含其他对象或数组的对象和数组” ”。他的一级版本包含一个非嵌套数组,例如const arr = [1, 2, 3]

第二篇文章对原始类型和非原始类型进行了区分。因此,类别将类似于字符串与数组。

前一篇文章认为,当从“一个级别”数组(而不是嵌套数组)制作浅表副本时,会创建一个新引用。并且当创建引用时,原始引用中的更改不会影响复制的数组。例如,

const arr = [1, 2, 3]
const newArr = [...arr]
arr[0] = 100
console.log(newArr) // [1, 2, 3]

第二篇文章争辩说,在创建引用时,新副本和旧副本都指向相同的地址,更改其中一个将同时影响它们。他举的例子是给赋值运算符的:

const arr = [1, 2, 3]
const newArr = arr
arr[0] = 100
console.log(newArr) // [100, 2, 3]

我知道第一个示例是传播运算符,第二个示例是赋值运算符,但是当涉及引用时,影响新副本的原因是完全相反的。那么引用是否会导致新副本受原始副本的更改影响?

0 个答案:

没有答案
相关问题