Вопрос проверяет понимание работы с объектами по ссылке в JavaScript, что важно для избежания ошибок при копировании и изменении данных.
В JavaScript объекты (включая массивы и функции) являются ссылочными типами данных. Это означает, что переменная, которой присвоен объект, хранит не сам объект, а ссылку (адрес) на область памяти, где этот объект расположен. Примитивные типы (числа, строки, булевы значения) хранятся и копируются по значению.
Когда вы присваиваете объект новой переменной, копируется именно ссылка, а не сам объект. Обе переменные теперь указывают на один и тот же объект в памяти. Любое изменение объекта через одну переменную отразится и на другой.
let obj1 = { name: 'Alice' };
let obj2 = obj1; // копируется ссылка
obj2.name = 'Bob';
console.log(obj1.name); // 'Bob' — объект изменёнДля создания независимой копии объекта необходимо выполнить поверхностное или глубокое копирование. Поверхностное копирование можно сделать с помощью Object.assign() или спред-оператора, но вложенные объекты останутся общими.
let original = { a: 1, b: { c: 2 } };
let shallowCopy = { ...original };
shallowCopy.b.c = 3;
console.log(original.b.c); // 3 — вложенный объект общийДля полного копирования используется JSON.parse(JSON.stringify(obj)) или библиотеки вроде Lodash.
Понимание ссылок критично при работе с состоянием в React (чтобы не мутировать state напрямую), при передаче объектов в функции (изменения внутри функции влияют на внешний объект) и при сравнении объектов (два объекта с одинаковыми свойствами не равны, если это разные ссылки).
Вывод: Ссылочная модель JavaScript позволяет эффективно работать с памятью, но требует осторожности при копировании и изменении объектов. Используйте поверхностное или глубокое копирование, когда нужно создать независимую копию, особенно в иммутабельных подходах, таких как Redux или React state.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию