PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

В чем разница между объектом и примитивными типами данных?

Объекты и прототипы

Объекты и примитивы различаются тем, как они хранятся, копируются и сравниваются: примитивы — по значению, объекты — по ссылке.

Примитивы

  • 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 типов) — по значению, иммутабельны, сравнение по значению. Объекты — по ссылке, изменяемы, сравнение по ссылке ({} !== {}). Отсюда: мутация общего объекта видна всем, для копии нужно клонирование.

Другие вопросы раздела