В чем разница между объектом и примитивными типами данных?
Объекты и прототипы
Объекты и примитивы различаются тем, как они хранятся, копируются и сравниваются: примитивы — по значению, объекты — по ссылке.
Примитивы
- 7 типов:
string,number,bigint,boolean,undefined,null,symbol. - Хранятся и передаются по значению — копия независима.
- Иммутабельны — нельзя изменить, только заменить.
- Сравниваются по значению.
let a = 5;
let b = a; // копия значения
b = 10;
a; // 5 — не изменилось
'abc' === 'abc'; // trueОбъекты (ссылочные типы)
- Объекты, массивы, функции.
- Хранятся в куче, переменная держит ссылку.
- Копирование переменной копирует ссылку — объект общий.
- Изменяемы.
- Сравниваются по ссылке.
const o1 = { x: 1 };
const o2 = o1; // копия ссылки
o2.x = 9;
o1.x; // 9 — общий объект
{} === {}; // false — разные ссылкиПрактические следствия
- Мутация общего объекта видна везде.
- Для независимой копии объект клонируют (
{...obj},structuredClone). - Объект как аргумент передаётся по ссылке.
Коротко для собеседования
Примитивы (7 типов) — по значению, иммутабельны, сравнение по значению. Объекты — по ссылке, изменяемы, сравнение по ссылке ({} !== {}). Отсюда: мутация общего объекта видна всем, для копии нужно клонирование.