> Какие примитивные типы существуют в JavaScript? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Garage Eight, Верме, VK
Стек: JavaScript
> Пример ответа
Короткий ответ
В JavaScript существует 7 примитивных типов: string, number, bigint, boolean, undefined, symbol, null. Все, кроме null и undefined, имеют объектные обёртки. Примитивы неизменяемы и передаются по значению, в отличие от объектов, которые передаются по ссылке. Тип null технически является object из-за исторической ошибки в typeof.
Подробное объяснение
Примитивные типы - это фундаментальные строительные блоки данных в JavaScript. Они не являются объектами и не имеют собственных методов (кроме временного автоупаковывания в объектные обёртки). Каждый примитив представляет одно значение.
string- последовательность символов в кавычках. Неизменяема, любая операция создаёт новую строку.number- числа с плавающей точкой двойной точности (64-bit IEEE 754), включаяNaN,Infinity,-Infinity.bigint- целые числа произвольной точности, создаются через суффиксnили функциюBigInt().boolean-trueилиfalse.undefined- значение по умолчанию для неинициализированных переменных и отсутствующих свойств.symbol- уникальные и неизменяемые идентификаторы, часто используются как ключи объектов для избежания коллизий.null- намеренное отсутствие значения.typeof null === "object"- известная ошибка из ранних версий JS.
Все примитивы, кроме null и undefined, имеют объектные обёртки (String, Number, Boolean, BigInt, Symbol), которые позволяют временно вызывать методы на примитивах. Это называется autoboxing.
На практике
При работе с примитивами важно помнить о неявном приведении типов. Например, "5" - 1 даёт 4, а "5" + 1 - "51". Для сравнения используйте строгое равенство ===, чтобы избежать неожиданных преобразований.
bigint несовместим с обычными числами в арифметических операциях - требуется явное преобразование. symbol всегда уникален, даже если создан с одинаковым описанием: Symbol("id") !== Symbol("id").
Проверка на null часто делается через === null, а на undefined - через typeof x === "undefined" или === undefined.
Пример кода
JAVASCRIPT// Примитивные типыconst str = "hello"; // stringconst num = 42; // numberconst big = 9007199254740991n; // bigintconst bool = true; // booleanconst undef = undefined; // undefinedconst sym = Symbol("key"); // symbolconst empty = null; // null// Autoboxingconsole.log("hello".toUpperCase()); // "HELLO" - временная обёртка String// Проверка типовconsole.log(typeof null); // "object" - историческая ошибкаconsole.log(typeof undefined); // "undefined"console.log(typeof Symbol()); // "symbol"// Сравнениеconsole.log(0 == false); // true - неявное приведениеconsole.log(0 === false); // false - строгое сравнение// Bigint и number несовместимы// console.log(1n + 1); // TypeErrorconsole.log(Number(1n) + 1); // 2 - явное преобразование
Как отвечать на собеседовании
Начните с перечисления всех 7 типов, затем выделите ключевые особенности: неизменяемость, передача по значению, autoboxing. Упомяните typeof null как исторический баг. Если спросят про разницу с объектами, подчеркните, что примитивы - это значения, а объекты - ссылки. Для senior-уровня добавьте детали про bigint и symbol, их практическое применение и ограничения.
Что проверяет интервьюер
- Знание полного списка примитивов (особенно
bigintиsymbolкак более новые). - Понимание разницы между примитивами и объектами (значение vs ссылка, неизменяемость).
- Осведомлённость о подводных камнях:
typeof null, autoboxing, неявное приведение типов. - Умение объяснить, когда и зачем использовать
symbolилиbigint.
Типичные ошибки
- Забывают про
bigintиsymbol, называют только 5 типов. - Утверждают, что
null- это объект, не упоминая историческую причину. - Путают примитивы с их объектными обёртками (например,
new String("x")- это объект, а не примитив). - Считают, что примитивы имеют методы - не понимают механизм autoboxing.
- Используют
==для сравнения сnullиundefined, не зная, чтоnull == undefinedдаётtrue.
> Похожие задачи по frontend
Почему стрелочную функцию нельзя использовать как конструктор в JavaScript
Как реализовать функцию any, которая работает как Promise.any?
В какой очередности выполняются console.log, setTimeout и Promise в JavaScript
Как предотвратить всплытие события клика в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью