Вопрос проверяет понимание различий в поведении примитивных типов и объектов при операциях присваивания и передачи в функции, что критично для избегания ошибок с мутациями и побочными эффектами.
В JavaScript данные делятся на примитивные типы (number, string, boolean, null, undefined, symbol, bigint) и объекты (включая массивы, функции, даты). При присваивании или передаче в функцию они ведут себя принципиально по-разному из-за способа хранения в памяти.
Когда вы присваиваете переменную с примитивным значением другой переменной, создаётся новая, независимая копия этого значения. Две переменные после этого никак не связаны. Изменение одной не затронет другую.
let a = 10;
let b = a; // b получает копию значения 10
b = 20;
console.log(a); // 10 — a не изменилось
console.log(b); // 20Объекты хранятся в памяти, а переменная содержит лишь ссылку (адрес) на этот объект. При присваивании копируется именно эта ссылка, а не сам объект. В результате несколько переменных начинают указывать на один и тот же объект в памяти.
let obj1 = { name: 'Alice' };
let obj2 = obj1; // obj2 получает ссылку на тот же объект
obj2.name = 'Bob';
console.log(obj1.name); // 'Bob' — изменение видно через obj1
console.log(obj2.name); // 'Bob'То же самое происходит при передаче объекта в функцию — функция получает ссылку, и может изменить исходный объект (побочный эффект).
Понимание этого механизма важно для управления состоянием, особенно в React, Redux или при работе с массивами. Чтобы избежать нежелательных мутаций, часто нужно создавать настоящие копии объектов.
const copy = { ...original }; или Object.assign({}, original).const copy = [...original]; или original.slice().JSON.parse(JSON.stringify(obj)) (с ограничениями) или библиотек типа Lodash.// Пример поверхностного копирования
const original = { x: 1, nested: { y: 2 } };
const shallowCopy = { ...original };
shallowCopy.x = 99; // Не влияет на original
shallowCopy.nested.y = 100; // Влияет на original.nested!
console.log(original.x); // 1
console.log(original.nested.y); // 100Вывод: Примитивы копируются по значению, что делает работу с ними предсказуемой и безопасной. Объекты копируются по ссылке, что требует внимательности при модификациях и часто necessitates создание явных копий для изоляции данных, особенно в архитектурах, чувствительных к побочным эффектам.