В JavaScript объекты не копируются так, как примитивы. Когда вы работаете с объектами, вы работаете со ссылками. Это как с автомобилем в гараже: можно передать адрес гаража, а можно построить копию машины.

Ссылки на объект

Когда вы присваиваете один объект другому, вы не копируете его, а создаёте ссылку на тот же самый объект.

Пример из жизни: один и тот же гараж

Вы и ваш друг имеете ключи от одного гаража. Если друг перекрасил машину внутри — вы тоже увидите изменения, ведь это та же машина.

Как копировать объекты

Чтобы создать отдельный, независимый объект, нужно его скопировать.

Поверхностное копирование

С помощью Object.assign():

Или с помощью spread-оператора:

Но есть нюанс!

Оба этих способа делают поверхностную копию. Если внутри объекта есть вложенный объект — он всё равно будет скопирован по ссылке.

Глубокое копирование

Если нужно полностью отделить копию, включая все вложенные объекты, можно использовать JSON:

Минус этого способа — он не копирует функции, даты и другие сложные типы корректно.

Сравнение объектов

Важно помнить: сравнение объектов идёт по ссылке, а не по содержимому.

Работа с объектами в JavaScript требует понимания: вы работаете не с копиями, а с указателями. Если хотите создать новый независимый объект — используйте копирование, а не простое присваивание.

Представьте: у вас в гараже стоит BMW. Если вы просто передали адрес гаража другу, он получит ту же машину. А если хотите свою — покупайте новую!