Копирование объектов в JavaScript может быть немного запутанным из-за механизма передачи по ссылке. Когда мы присваиваем объект одной переменной другой, это создает ссылку на тот же самый объект. Если мы изменяем что-то в одной переменной, это отразится и на другой переменной.
let obj1 = { name: 'John' };
let obj2 = obj1;
obj1.name = 'Alice';
console.log(obj1.name); // Alice
console.log(obj2.name); // Alice
Чтобы создать копию объекта, а не ссылку, можно использовать различные подходы. Один из них — это использование оператора расширения (spread operator):
let obj1 = { name: 'John' };
let obj2 = { ...obj1 };
obj1.name = 'Alice';
console.log(obj1.name); // Alice
console.log(obj2.name); // John
Другой способ — использовать метод Object.assign()
:
let obj1 = { name: 'John' };
let obj2 = Object.assign({}, obj1);
obj1.name = 'Alice';
console.log(obj1.name); // Alice
console.log(obj2.name); // John
В обоих случаях мы создаем копию объекта obj1
, а не ссылку на него.