Middle
17
0
questionbank

Какими способами можно клонировать объект в JavaScript?

Ответ от нейросети sobes.tech
  • Спред-оператор ... (Shallow Copy).
  • Object.assign() (Shallow Copy).
  • JSON.parse(JSON.stringify(obj)) (Deep Copy, но с ограничениями).
  • Рекурсивная функция (Deep Copy).
  • Библиотеки (например, Lodash с методом _.cloneDeep(), Deep Copy).

Сравнение Shallow vs. Deep Copy:

Тип клонированияОписаниеПример
Shallow CopyКопирует поверхностные свойства. Вложенные объекты остаются по ссылке.const newObj = { ...origObj }; / const newObj = Object.assign({}, origObj);
Deep CopyКопирует все свойства, включая вложенные объекты и массивы.const newObj = JSON.parse(JSON.stringify(origObj)); / Функция глубокого копирования / _.cloneDeep(origObj)

Ограничения JSON.parse(JSON.stringify(obj)):

  • Не копирует функции.
  • Не копирует undefined.
  • Не копирует Symbol.
  • Не копирует циклические ссылки.
  • Преобразует Date объекты в строки.
  • Преобразует NaN, Infinity и -Infinity в null.

Пример shallow copy со спред-оператором:

javascript
  • Спред-оператор ... (Shallow Copy).
  • Object.assign() (Shallow Copy).
  • JSON.parse(JSON.stringify(obj)) (Deep Copy, но с ограничениями).
  • Рекурсивная функция (Deep Copy).
  • Библиотеки (например, Lodash с методом _.cloneDeep(), Deep Copy).

Сравнение Shallow vs. Deep Copy:

Тип клонированияОписаниеПример
Shallow CopyКопирует поверхностные свойства. Вложенные объекты остаются по ссылке.const newObj = { ...origObj }; / const newObj = Object.assign({}, origObj);
Deep CopyКопирует все свойства, включая вложенные объекты и массивы.const newObj = JSON.parse(JSON.stringify(origObj)); / Функция глубокого копирования / _.cloneDeep(origObj)

Ограничения JSON.parse(JSON.stringify(obj)):

  • Не копирует функции.
  • Не копирует undefined.
  • Не копирует Symbol.
  • Не копирует циклические ссылки.
  • Преобразует Date объекты в строки.
  • Преобразует NaN, Infinity и -Infinity в null.

Пример shallow copy со спред-оператором:

javascript

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

javascriptobject-cloningdeep-copyshallow-copy