structuredClone
Создаёт глубокую копию объекта со всеми вложенными данными.
Доступно с: Web API
Синтаксис
structuredClone(value)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| value | any | Значение, которое нужно скопировать. |
Возвращаемое значение
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.