PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

Чем отличаются типы данных в JavaScript и как это влияет на код?

Основы языка

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

Примитивы (передаются по значению)

  • string — строка.
  • number — число, включая NaN и Infinity.
  • bigint — большие целые.
  • boolean — true / false.
  • undefined — переменная объявлена, но не инициализирована.
  • symbol — уникальный идентификатор.
  • null — намеренное отсутствие значения (typeof null === 'object' — историческая ошибка).

Примитивы иммутабельны: методы строк возвращают новую строку, а не меняют исходную.

Ссылочные типы (передаются по ссылке)

  • object — объекты, массивы, функции, Date, RegExp и т. д.

Переменная хранит не сам объект, а ссылку на него в куче.

Как это влияет на код

let a = 10;
let b = a;
b = 20;
console.log(a); // 10 — копия значения

let obj1 = { x: 1 };
let obj2 = obj1;
obj2.x = 99;
console.log(obj1.x); // 99 — одна ссылка на объект

Поэтому объекты нужно копировать (spread, structuredClone) перед изменением, если исходник менять нельзя.

Проверка типов

  • typeof — для примитивов (кроме null).
  • Array.isArray() — для массивов.
  • Object.prototype.toString.call(x) — универсальный способ.

Коротко для собеседования

7 примитивов (string, number, bigint, boolean, undefined, symbol, null) передаются по значению и иммутабельны; объекты — по ссылке. Из-за этого мутация общего объекта видна во всех переменных, ссылающихся на него.

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