ENIGMA AI
ENIGMA AI

Какие типы данных существуют в JavaScript?

встречается 15× JavaScript junior language_specific

Как ответить

В JavaScript все данные делятся на примитивные и ссылочные типы. Примитивы — это числа, строки, булевы значения, null, undefined, символы и BigInt. Они хранятся и сравниваются по значению. Ссылочные типы — это объекты, массивы, функции — они хранятся по ссылке, и при сравнении проверяется, указывают ли переменные на один и тот же объект в памяти.

Примитивные типы:

  • Number — 64-битные числа с плавающей точкой (IEEE 754). Включает Infinity, -Infinity, NaN. Пример: let age = 25;
  • String — последовательность символов в UTF-16. Можно задавать в одинарных, двойных кавычках или обратных (шаблонные строки). let name = 'Alex';
  • Boolean — true/false. let isActive = true;
  • Null — специальное значение «ничего», объект по ошибке typeof. let data = null;
  • Undefined — значение не присвоено. let x; // undefined
  • Symbol — уникальный идентификатор, создаётся вызовом Symbol(). Используется для приватных свойств объектов.
  • BigInt — для целых чисел произвольной длины. Добавлен в ES2020. let big = 123n;

Ссылочные типы:

  • Object — коллекция пар ключ-значение. let user = { name: 'Alice', age: 30 };
  • Array — упорядоченный список элементов. let list = [1, 2, 3];
  • Function — вызываемый объект. function greet() { return 'Hi'; }

Важно: typeof null возвращает 'object' — это историческая ошибка, признанная багом. Также примитивы, кроме null и undefined, имеют объектные обёртки (Number, String, Boolean), которые позволяют вызывать методы, но после операции обёртка удаляется.

При сравнении примитивов используется строгое равенство (===) — оно сравнивает и тип, и значение. Для ссылочных типов === сравнивает ссылки: {} === {} вернёт false, потому что это разные объекты.

Ключевые тезисы

  • Примитивы: number, string, boolean, null, undefined, symbol, BigInt — хранятся и сравниваются по значению.
  • Ссылочные типы: object, array, function — хранятся по ссылке, сравнение по ссылке.
  • typeof null === 'object' — известный баг, не исправленный для обратной совместимости.
  • Примитивы имеют объектные обёртки (Number, String, Boolean), но это временные объекты.
  • Строгое равенство (===) для примитивов сравнивает значение и тип, для объектов — ссылки.

Что спросят дальше

  • — Чем отличается == от === в контексте примитивов? Приведи примеры неочевидного поведения.
  • — Как проверить, что переменная — массив, если typeof возвращает 'object'?
  • — Что произойдёт при вызове метода на примитиве, например 'hello'.toUpperCase()?

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение