Когда мы копируем объекты в JS, важно понимать, «зацепят» ли изменения оригинала нашу копию.
⤴️ Shallow Copy (Поверхностная)
Копирует только верхний уровень. Если внутри есть вложенные объекты, то копия будет ссылаться на те же участки памяти, что и оригинал.
Как сделать:
[...arr], {...obj} или Object.assign().
Недостаток: Изменишь вложенный объект в копии — он изменится и в оригинале.
⤵️ Deep Copy (Глубокая)
Создает полную независимую копию всех уровней вложенности.
Как сделать:
structuredClone(obj) — современный стандарт (рекомендуется в 2026!).
JSON.parse(JSON.stringify(obj)) — старый костыль (не копирует методы и Date).
Библиотеки типа lodash (cloneDeep).
const user = { name: "Ivan", skills: ["JS"] };
const copy = { ...user }; // Поверхностная копия
copy.skills.push("React");
console.log(user.skills); // ["JS", "React"] — Ой! Оригинал тоже изменился.
