← Назад к вопросам
Как передается значение ссылочного типа?
2.3 Middle🔥 161 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Передача ссылочных типов в JavaScript
В JavaScript есть два типа данных: примитивные и ссылочные. Это фундаментальное различие влияет на то, как данные передаются между переменными и функциями.
Типы данных
Примитивные (передаются по значению):
- string, number, boolean, null, undefined, symbol, bigint
Ссылочные (передаются по ссылке):
- Объекты {}, массивы [], функции, даты и др.
Копирование значений
let a = 5;
let b = a; // копируется значение
b = 10;
console.log(a); // 5
Для объектов копируется ссылка:
const obj1 = { name: 'Иван' };
const obj2 = obj1; // обе переменные указывают на один объект
obj2.name = 'Мария';
console.log(obj1.name); // 'Мария'
Передача в функции
function changeNumber(x) {
x = 20; // не влияет на исходную переменную
}
let num = 5;
changeNumber(num);
console.log(num); // 5
function changeObject(obj) {
obj.name = 'Петр'; // влияет на исходный объект
}
const user = { name: 'Иван' };
changeObject(user);
console.log(user.name); // 'Петр'
Переназначение vs изменение
const user = { name: 'Иван' };
function wrong(obj) {
obj = { name: 'Мария' }; // только локальная переменная
}
wrong(user);
console.log(user.name); // 'Иван'
function correct(obj) {
obj.name = 'Мария'; // меняет сам объект
}
correct(user);
console.log(user.name); // 'Мария'
Копирование объектов
Shallow copy:
const original = { name: 'Иван', address: { city: 'Москва' } };
const copy = { ...original };
copy.name = 'Мария';
console.log(original.name); // 'Иван'
Deep copy:
const deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.address.city = 'СПб';
console.log(original.address.city); // 'Москва'
Сравнение
const obj1 = { name: 'Иван' };
const obj2 = { name: 'Иван' };
const obj3 = obj1;
console.log(obj1 === obj2); // false — разные объекты
console.log(obj1 === obj3); // true — одна ссылка
Правила
✓ Примитивы копируются полностью ✓ Объекты передаются по ссылке ✓ Переназначение не меняет исходный объект ✓ Изменение свойств меняет исходный объект ✓ Используй spread или JSON.parse для копирования
Понимание разницы между ссылочными и примитивными типами критично для написания правильного JavaScript кода.