Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: reference, value, object, array, copy, assignment

Что происходит при присвоении объекта или массива другой переменной — копирование значения или ссылки?

Проверяет понимание разницы между копированием по значению и по ссылке в JavaScript при работе с объектами и массивами.

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

В JavaScript примитивные типы (числа, строки, булевы) копируются по значению. Объекты и массивы — по ссылке. Это значит, что при присвоении объекта новой переменной обе переменные указывают на один и тот же объект в памяти. Изменение через одну переменную отразится на другой. Для создания независимой копии нужно использовать методы вроде Object.assign() или spread-оператор.

Длинный ответ

Копирование по значению и по ссылке

В 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

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    5

  • Сложность:

    2

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#reference

#value

#object

#array

#copy

#assignment

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию