Глубокое клонирование создает полностью независимую копию объекта — изменения клона никогда не влияют на оригинал. Это отличается от поверхностного копирования, которое копирует только ссылки верхнего уровня.
Функция deepClone обрабатывает каждый тип данных отдельно:
string, number, boolean, null) — возвращаются как есть, так как они уже копируются по значениюnew Date(obj) для сохранения временной меткиnew RegExp(obj) для сохранения паттерна и флаговArray.isArray(obj), клонируются в новый []{}Для объектов и массивов функция перебирает собственные перечисляемые свойства с помощью for...in в сочетании с hasOwnProperty(), чтобы избежать копирования унаследованных свойств. Каждое значение передается рекурсивно обратно в deepClone:
function deepClone(obj) {
if (obj === null || typeof obj !== "object") return obj;
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
const clone = Array.isArray(obj) ? [] : {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key]);
}
}
return clone;
}
Map, Set, WeakMapФункция deepClone возвращает примитивные значения напрямую, потому что они уже копируются по значению в JavaScript, что делает рекурсивное клонирование для них ненужным.
Новый — ещё не проверен сообществом
Вы