Копирование объектов
Вопрос
Как скопировать объект? Чем поверхностная копия отличается от глубокой?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
spread и Object.assign копируют только верхний уровень
вложенные объекты остаются общими по ссылке
structuredClone делает глубокую копию и понимает Map, Set, Date, циклы
JSON.parse(JSON.stringify) теряет undefined, функции, Date превращает в строку
глубокая копия дорогая - в React обычно нужна не она, а неизменяемое обновление по пути
Что могут спросить следом
- Как неизменяемо обновить поле на третьем уровне вложенности
- Чем плоха глубокая копия состояния на каждый рендер
- Что произойдёт с Map при JSON.stringify
Разбор
{...obj} и Object.assign копируют только первый уровень: вложенные объекты остаются
общими, и мутация внутри заденет оригинал. Глубокую копию даёт structuredClone - он
переживает циклы, Map, Set, Date, типизированные массивы, но не копирует функции.
JSON.parse(JSON.stringify(x)) - старый трюк с потерями: undefined и функции исчезают,
Date становится строкой, циклы бросают исключение.
В React глубокая копия обычно не нужна: нужно неизменяемо обновить путь, оставив остальные
ветки по ссылке - так memo и useMemo продолжают работать.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.