Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: объекты, глубокое копирование

Перечислите все способы копирования объектов?

Этот вопрос проверяет знание различных способов создания копий объектов, что важно для работы с изменяемыми данными без изменения исходных объектов.

Короткий ответ

Объекты можно копировать несколькими способами. Поверхностное копирование можно сделать с помощью Object.assign(), оператора распространения { ...obj }, а для глубокого копирования часто используют JSON.parse(JSON.stringify(obj)). Поверхностная копия копирует только верхний уровень свойств, в то время как глубокая копия копирует все уровни объекта, включая вложенные.

Длинный ответ

В JavaScript есть несколько способов копирования объектов, и они делятся на поверхностные и глубокие копии.

  1. Поверхностные копии:

    • Object.assign(): Создает новую копию объекта, копируя свойства только верхнего уровня. Вложенные объекты копируются по ссылке.

      let original = { a: 1, b: { c: 2 } }; 
      let copy = Object.assign({}, original); 
      copy.b.c = 3; 
      console.log(original.b.c); // 3, так как вложенный объект скопирован по ссылке.
    • Оператор расширения (...): Работает аналогично Object.assign(), создавая поверхностную копию объекта.

      let original = { a: 1, b: { c: 2 } }; 
      let copy = { ...original };
  2.  Глубокие копии:

    • JSON.parse(JSON.stringify()): Простой способ создать глубокую копию, однако он не работает с функциями и другими специальными объектами (например, Date, Map, Set).

      let original = { a: 1, b: { c: 2 } }; 
      let copy = JSON.parse(JSON.stringify(original)); 
      copy.b.c = 3; 
      console.log(original.b.c); // 2, так как объект был полностью скопирован.
    • Рекурсивная функция: Для создания глубокой копии, которая корректно работает со сложными структурами, можно использовать рекурсивные функции или специальные библиотеки вроде Lodash.

      function deepCopy(obj) {  
      return Array.isArray(obj)
      		? obj.map(deepCopy)
      		: typeof obj === 'object'
      		? Object.keys(obj).reduce((acc, key) => {
      				acc[key] = deepCopy(obj[key]);
      				return acc;
      			}, {})
      		: obj;
      }

Для ежедневной работы часто достаточно поверхностных копий, но если объект содержит вложенные структуры, лучше использовать глубокое копирование, чтобы избежать проблем с изменением данных по ссылке.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#объекты

#глубокое копирование

Подпишись на React Developer в телеграм