Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник JavaScript

structuredClone

Создаёт глубокую копию объекта со всеми вложенными данными.

Доступно с: Web API

Синтаксис

structuredClone(value)

Параметры

ПараметрТипОписание
valueanyЗначение, которое нужно скопировать.

Возвращаемое значение

anyГлубокая копия значения.

Примеры

Вложенные объекты тоже копируются:

const original = { name: 'Anna', address: { city: 'Berlin' } };
const copy = structuredClone(original);
 
copy.address.city = 'Paris';
 
console.log(original.address.city);

Результат:

Berlin

Для сравнения — spread копирует только верхний уровень:

const original = { name: 'Anna', address: { city: 'Berlin' } };
const copy = { ...original };
 
copy.address.city = 'Paris';
 
console.log(original.address.city);

Результат:

Paris

Даты, Map и Set сохраняют свой тип:

const data = { created: new Date(0), tags: new Set(['a']) };
const copy = structuredClone(data);
 
console.log(copy.created instanceof Date, copy.tags.has('a'));

Результат:

true true

Примечания

Функции, DOM-элементы и экземпляры классов с методами скопировать нельзя: для функций будет ошибка DataCloneError, а у объектов классов потеряются методы. Старый способ JSON.parse(JSON.stringify(obj)) теряет ещё и даты, undefined и Map.

См. также

  • Object.assign — Копирует свойства из одних объектов в другой.
  • Spread syntax — Три точки раскрывают массив или объект на отдельные элементы.
  • JSON.stringify — Преобразует значение в строку в формате JSON.

Вопросы и ответы по теме

В учебнике

  • Неизменяемость данных — Изменяемые и неизменяемые данные в JavaScript: ссылки на объекты, копирование через spread, методы toSorted и with, Object.freeze и structuredClone.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.