Влияет ли ссылка в мелкой копии на изменения оригинальной копии новой копии? - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь понять разницу между мелкой копией, глубокой копией и оператором присваивания. Сложность путаницы заключается в противоречивых статьях, таких как , и , . Из того, что я понимаю, ключевой момент в понимании этих двух понятий - это ссылка, независимо от того, копируете ли вы фактическое значение или просто ссылку на значение.

В первой статье проводится различие между «одним уровнем». "и" вложенный ", говоря, что" мелкая копия означает тот факт, что копируется только один уровень ", а глубокая копия - это" объекты и массивы, содержащие другие объекты или массивы ". Его версия одного уровня включает в себя не вложенный массив, например 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]

Я понимаю, что первый пример - это оператор распространения, а второй - оператор присваивания, но когда дело доходит до ссылки, являющейся причиной воздействия на Новая копия абсолютно противоположна. Таким образом, ссылка приводит к тому, что новая копия будет изменена в результате изменений в оригинальной копии или нет?

...