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