PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

Сравни способы копирования объектов и объясни, когда выбирать каждый вариант.

Объекты и прототипы

Копировать объекты можно поверхностно (spread, Object.assign) или глубоко (structuredClone, JSON, lodash). Выбор зависит от наличия вложенности и требований к производительности.

Поверхностные способы

Копируют только верхний уровень; вложенные объекты остаются общими ссылками.

const shallow1 = { ...obj };
const shallow2 = Object.assign({}, obj);
const arrCopy = arr.slice();

Применение: плоские объекты, иммутабельное обновление верхнего уровня (React-состояние).

Глубокие способы

structuredClone (рекомендуемый)

const deep = structuredClone(obj);

Копирует вложенность, Map, Set, Date, циклы. Не копирует функции.

JSON

const deep = JSON.parse(JSON.stringify(obj));

Быстро, но теряет функции, undefined, Symbol, ломается на циклах, Date → строка.

lodash.cloneDeep

Надёжно для сложных структур, но внешняя зависимость.

Как выбирать

  • Плоский объект → spread/assign (быстро).
  • Вложенность, современный браузер → structuredClone.
  • Простые данные без функций/дат → JSON (осторожно).
  • Сложные структуры и legacy → lodash.

Коротко для собеседования

Поверхностно — {...obj}, Object.assign (общие вложенные ссылки). Глубоко — structuredClone (лучший дефолт), JSON.parse(JSON.stringify) (с ограничениями), lodash.cloneDeep. Выбор — по вложенности и типам данных.

Другие вопросы раздела