Проверяет понимание разницы между копированием по значению и по ссылке в JavaScript при работе с объектами и массивами.
В JavaScript существует два способа передачи данных: по значению и по ссылке. Примитивные типы (числа, строки, булевы значения, null, undefined, символы) всегда копируются по значению. Это означает, что при присвоении переменной создается независимая копия данных в памяти. Изменение одной переменной не влияет на другую.
Объекты (включая массивы, функции, даты) копируются по ссылке. Переменная хранит не сам объект, а ссылку на область памяти, где он находится. При присвоении объекта другой переменной копируется именно ссылка, а не сам объект. Обе переменные теперь указывают на один и тот же объект.
// Копирование по значению (примитивы)
let a = 10;
let b = a;
b = 20;
console.log(a); // 10 — a не изменилось
// Копирование по ссылке (объекты)
let obj1 = { name: 'Alice' };
let obj2 = obj1;
obj2.name = 'Bob';
console.log(obj1.name); // 'Bob' — изменилось
// Массивы тоже объекты
let arr1 = [1, 2, 3];
let arr2 = arr1;
arr2.push(4);
console.log(arr1); // [1, 2, 3, 4]Для поверхностного копирования объекта можно использовать spread-оператор или Object.assign(). Для глубокого копирования (вложенные объекты) потребуется JSON.parse(JSON.stringify(obj)) или библиотеки вроде lodash.
// Поверхностное копирование
let original = { x: 1, y: { z: 2 } };
let shallowCopy = { ...original };
shallowCopy.y.z = 3;
console.log(original.y.z); // 3 — вложенный объект общий
// Глубокое копирование
let deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.y.z = 4;
console.log(original.y.z); // 3 — независимоПонимание разницы между копированием по значению и по ссылке критично для предотвращения неожиданных мутаций данных. Используйте поверхностное или глубокое копирование, когда нужно создать независимую копию объекта или массива, особенно при работе с состоянием в React или Redux.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию