Sobes.tech
Back to questions
Middle+
1

Как скопировать объект в JavaScript? Чем поверхностное копирование отличается от глубокого?

Companies where asked
ООО Делай мебель

Answer from AI

sobes.tech AI

В JavaScript для копирования объекта можно использовать несколько способов:

  1. Поверхностное копирование (shallow copy):
  • Object.assign({}, obj) — копирует только верхний уровень свойств.
  • Оператор расширения: { ...obj }
  1. Глубокое копирование (deep copy):
  • Рекурсивное копирование всех вложенных объектов.
  • Использование JSON.parse(JSON.stringify(obj)) — простой способ, но не работает с функциями, датами, undefined и т.п.
  • Специализированные библиотеки, например lodash (_.cloneDeep(obj))

Разница:

  • Поверхностное копирование копирует только первый уровень свойств. Если в объекте есть вложенные объекты, то копируются ссылки на них, а не сами объекты.
  • Глубокое копирование создает полностью независимую копию, включая все вложенные объекты.

Пример поверхностного копирования:

const original = { a: 1, b: { c: 2 } };
const copy = { ...original };
copy.b.c = 3;
console.log(original.b.c); // 3 — изменился и оригинал, так как b — ссылка

Пример глубокого копирования с JSON:

const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.b.c = 3;
console.log(original.b.c); // 2 — оригинал не изменился