В JavaScript объекты не копируются так, как примитивы. Когда вы работаете с объектами, вы работаете со ссылками. Это как с автомобилем в гараже: можно передать адрес гаража, а можно построить копию машины.
Ссылки на объект
Когда вы присваиваете один объект другому, вы не копируете его, а создаёте ссылку на тот же самый объект.
Пример из жизни: один и тот же гараж
Вы и ваш друг имеете ключи от одного гаража. Если друг перекрасил машину внутри — вы тоже увидите изменения, ведь это та же машина.
Как копировать объекты
Чтобы создать отдельный, независимый объект, нужно его скопировать.
Поверхностное копирование
С помощью Object.assign():
Или с помощью spread-оператора:
Но есть нюанс!
Оба этих способа делают поверхностную копию. Если внутри объекта есть вложенный объект — он всё равно будет скопирован по ссылке.
Глубокое копирование
Если нужно полностью отделить копию, включая все вложенные объекты, можно использовать JSON:
Минус этого способа — он не копирует функции, даты и другие сложные типы корректно.
Сравнение объектов
Важно помнить: сравнение объектов идёт по ссылке, а не по содержимому.
Работа с объектами в JavaScript требует понимания: вы работаете не с копиями, а с указателями. Если хотите создать новый независимый объект — используйте копирование, а не простое присваивание.
Представьте: у вас в гараже стоит BMW. Если вы просто передали адрес гаража другу, он получит ту же машину. А если хотите свою — покупайте новую!