Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

Как работает присваивание объектов и массивов в JavaScript?

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

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

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

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

В JavaScript примитивные типы (числа, строки, булевы значения) присваиваются по значению, то есть создаётся новая копия данных. Однако объекты (включая массивы и функции) присваиваются по ссылке. Это означает, что переменная хранит не сам объект, а адрес в памяти, где он находится.

Принцип работы

Когда вы присваиваете объект или массив другой переменной, вы копируете только эту ссылку, а не содержимое. Обе переменные начинают указывать на один и тот же объект в памяти. Любые изменения, сделанные через одну переменную, немедленно видны через другую.

Пример и последствия

const original = { name: 'Alice', age: 30 };
const copy = original; // Копируется ссылка, а не объект

copy.age = 31;
console.log(original.age); // 31 — оригинальный объект тоже изменился!

// Аналогично с массивами
const arr1 = [1, 2, 3];
const arr2 = arr1;
arr2.push(4);
console.log(arr1); // [1, 2, 3, 4]

Как создать независимую копию?

Чтобы избежать нежелательного совместного использования данных, нужно создать новый объект или массив, скопировав содержимое старого. Это называется поверхностным клонированием.

  • Для объектов: используйте спред-оператор {...obj} или Object.assign({}, obj).
  • Для массивов: используйте спред-оператор [...arr], метод arr.slice() или Array.from(arr).
const shallowCopy = { ...original };
shallowCopy.age = 40;
console.log(original.age); // 31 — оригинал остался неизменным

Важно помнить, что это поверхностное копирование. Если свойствами объекта являются другие объекты, они всё равно будут скопированы по ссылке. Для глубокого копирования потребуются более сложные методы, например, JSON.parse(JSON.stringify(obj)) (с ограничениями) или библиотечные функции.

Где это применяется?

Понимание этого механизма необходимо при работе с состоянием в React, Redux или Vue, где непреднамеренная мутация объекта состояния может привести к багам и сложностям в отладке. Также это важно при передаче объектов в качестве аргументов функций, при работе с API, возвращающими сложные структуры данных, и при любых операциях, требующих модификации данных без влияния на оригинал.

Вывод: Присваивание по ссылке — фундаментальная особенность JavaScript для объектов и массивов. Она позволяет эффективно работать с большими структурами данных, но требует осторожности. Всегда создавайте явные копии, когда нужно изменить данные, не затрагивая исходный объект.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

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

#object assignment

#array assignment

#reference

#mutation

#shallow copy

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