Что меняется в массиве при копировании ссылки и spread?

Первая строка: 2, 1. Вторая: 9, true, false. B — тот же массив, а c — новый массив с общей ссылкой на первый вложенный объект.

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

Что ответить на собеседовании

Первая строка: 2, 1. Вторая: 9, true, false. B — тот же массив, а c — новый массив с общей ссылкой на первый вложенный объект.

Подробный разбор

Ответ с пояснениями

Условие

Определите вывод:

const a = [{n: 1}];
const b = a;
const c = [...a];
b.push({n: 2});
console.log(a.length, c.length);
c[0].n = 9;
console.log(a[0].n, b === a, c === a);

Ответ

Первая строка: 2, 1. Вторая: 9, true, false. B — тот же массив, а c — новый массив с общей ссылкой на первый вложенный объект.

Добавление через b меняет структуру a, но не c. Изменение n через c затрагивает объект, общий всем трём путям доступа. Spread выполняет поверхностное копирование контейнера, не рекурсивное клонирование элементов. Чтобы независимо изменить первый элемент, нужно создать и новый объект на этом уровне, например {...a[0], n:9}.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее