Расширяя ответ Шубхэма, в памяти хранятся только примитивы (int, string, bool, ...). Непримитивы (массив, объект, функция) хранят только указатели на память.
Таким образом, примитивы действуют так, как вы ожидаете переменную, потому что они на самом деле хранят значение:
let a = 1;
let b = a;
b = 2;
console.log(a); // 1
console.log(b); // 2
Хотя не-примитивы действительно хранят только ссылку:
let x = [1, 2];
let y = x;
y[0] = 5;
console.log(x); //[5,2]
И x, и y хранят указатели на позицию массива в памяти. Поэтому, когда вы изменяете позицию [0] на y, x видит «5» в позиции [0].
x -> [5,2] <-y </p>
https://medium.com/@junshengpierre/javascript-primitive-values-object-references-361cfc1cbfb0
Шубхам (я думаю) создает новое пространство в памяти с теми же значениями. Таким образом, обе переменные будут иметь разные указатели.
x = [1,2]; // x -> [1,2]
y = x; // x -> [1,2] y -> [1,2]
y[0] = 5 // x -> [1,2] y -> [5,2]
Еще один способ сделать это для объекта, хранящего примитивы, - создать новое свойство, чтобы вы также могли сохранить старое значение.
test = {
name : 'aldo'
}
test2 = test;
test2.newName = 'pakpahan';
console.log(test.name); // aldo
console.log(test2.newName) // pakpahan
Однако, поскольку у вас есть массив внутри объекта, вы столкнулись с другой проблемой указателя ссылки. Вам нужно создать новый указатель, если вы хотите отредактировать новый массив, сохранив оригинал.