Проверяет понимание ограничений методов глубокого копирования объектов в JavaScript и умение выбирать подходящий способ в зависимости от структуры данных.
Глубокое копирование создаёт полностью независимую копию объекта, включая вложенные структуры. Однако каждый популярный способ имеет свои ограничения, и на собеседованиях часто проверяют, знает ли кандидат эти подводные камни.
Самый простой способ, но он работает только с JSON-совместимыми данными. Всё, что не сериализуется в JSON, теряется или искажается.
Современный нативный метод, поддерживает циклы, Map, Set, Date, ArrayBuffer. Но не умеет копировать функции, DOM-узлы, Symbol и не сохраняет прототип класса.
const original = { date: new Date(), map: new Map([['a', 1]]) };
const clone = structuredClone(original);
// clone.date — Date, clone.map — Map
// но функции и прототипы не копируютсяСобственная функция даёт полный контроль, но требует ручной обработки типов и защиты от циклов через WeakMap.
function deepClone(obj, seen = new WeakMap()) {
if (obj === null || typeof obj !== 'object') return obj;
if (seen.has(obj)) return seen.get(obj);
const copy = Array.isArray(obj) ? [] : {};
seen.set(obj, copy);
for (const key of Reflect.ownKeys(obj)) {
copy[key] = deepClone(obj[key], seen);
}
return copy;
}lodash.cloneDeep покрывает большинство случаев, но добавляет зависимость и тоже не копирует функции корректно во всех сценариях.
Итог: выбирайте способ под задачу — JSON для простых данных, structuredClone для стандартных структур, рекурсию или lodash для сложных случаев с классами и циклами.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию