Middle
183
questionbank

Какие способы клонирования объектов ты знаешь?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech
  • Поверхностное (Shallow copy)
  • Глубокое (Deep copy)

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

  • Клонируется только верхний уровень объекта.
  • Вложенные объекты остаются ссылками на те же объекты, что и в оригинале.
  • Изменения во вложенных объектах клона отразятся в оригинале, и наоборот.

Способы:

  • Спред-оператор (...)
  • Object.assign()
javascript
javascript

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

  • Клонируется сам объект и все его вложенные объекты рекурсивно.
  • Изменения в клоне не влияют на оригинал, и наоборот.

Способы:

  • JSON.parse(JSON.stringify()) (имеет ограничения, например, не клонирует функции, Date, RegExp, undefined, Infinity, NaN, Map, Set)
  • Библиотеки (например, Lodash - _.cloneDeep())
  • Рекурсивная функция (для более точного контроля)
javascript
javascript

Сравнение:

ХарактеристикаПоверхностное клонированиеГлубокое клонирование
Вложенные объектыСсылки на оригинальные объектыКлонируются рекурсивно
Влияние измененийИзменения во вложенных объектах взаимныИзменения в клоне не влияют на оригинал
ПроизводительностьБыстрее (не нужно рекурсивно обходить все)Медленнее (требует рекурсивного обхода)
Сложность реализацииПроще (спред-оператор, Object.assign)Сложнее (рекурсивная функция, библиотеки)
ИспользованиеКогда вложенные объекты не нужно полностью изолироватьКогда требуется полная независимость клона от оригинала