Перевод этой статьи. В этой статье мы рассмотрим разные способы поверхностного и глубокого копирования объектов в JavaScript. Для начала стоит освежить пару базовых принципов. Объекты в JavaScript – это просто ссылки на участок в памяти. Эти ссылки мутабельны, т.е. их можно переназначить. Когда мы делаем копию такой ссылки, мы просто получаем 2 ссылки, которые указывают на один и тот же участок в памяти: В примере выше обе переменные – foo и bar – будут меняться при изменении одной из них. Это яркий пример того, как копирование объектов в JavaScript требует внимательности в зависимости от вашего кейса. Поверхностное копирование Если объект состоит только из примитивных данных, то для копирования можно использовать Object.assign(...). Обратите внимание, что оба метода (Object.assign и spread operator) позволяют копировать свойства из нескольких объектов в один: Проблема этих методов в том, что для тех свойств объекта, которые сами являются объектами, копируются только ссылки. Иными слов