Какие примитивные типы существуют в JavaScript?
Что проверяют
Знаете ли вы все семь и понимаете ли, почему проверка типа у пустой ссылки даёт объект.
Как отвечать
Примитивов семь: string, number, bigint, boolean, undefined, symbol, null. Всё остальное это объекты, включая массивы, функции и даты.
Что стоит сказать про каждый:
numberэто число с плавающей точкой двойной точности, целых отдельно нет. Отсюда знаменитый результат сложения0.1и0.2и безопасный предел целых чисел, за которым точность теряется;bigintпоявился как раз для целых произвольной длины. Смешивать его с обычными числами в арифметике нельзя;symbolдаёт гарантированно уникальный ключ свойства, поэтому им помечают служебные поля, не конфликтующие с чужими;undefinedозначает «значение не присвоено»,nullозначает «намеренно пусто». Разница смысловая, и путать их не стоит;stringхранит последовательность кодовых единиц UTF-16, поэтому эмодзи занимает две позиции по длине.
Общие свойства примитивов: они неизменяемы и копируются по значению. Строку нельзя изменить на месте, любая операция создаёт новую.
Особенность, о которой обычно и спрашивают следом: у примитивов есть методы, хотя они не объекты. При обращении к методу движок временно оборачивает значение в объект-обёртку, вызывает метод и выбрасывает обёртку. Поэтому присвоить примитиву новое свойство можно, но оно тут же теряется.
И отдельно про историческую ошибку: проверка типа у пустой ссылки возвращает строку с объектом. Это баг первой реализации, который не исправляют ради обратной совместимости. Поэтому такую проверку делают строгим сравнением.
Где спотыкаются
Забывают bigint или symbol.
Считают массив отдельным типом.
Не могут объяснить результат проверки типа у пустой ссылки.
Путают отсутствие значения и намеренную пустоту.