typeof null возвращающий "object" — это хорошо известный баг, появившийся в самой первой реализации JavaScript, созданной Бренданом Айхом в 1995 году.
В оригинальном движке JavaScript значения хранились в памяти с использованием тегов типов — маленьких числовых идентификаторов, которые указывали на тип значения. Тег типа для объектов был 0. К сожалению, null (представляющий «отсутствие значения») тоже хранился как нулевой указатель с числовым значением 0.
null pointer value = 0
object type tag = 0
Когда typeof вычислял null, он читал тег 0 и ошибочно определял его как объект.
Несмотря на то что это признано багом, это поведение так и не исправили по одной критической причине: обратная совместимость.
Предложение исправить это рассматривалось в ES6, но в итоге было отклонено.
Так как typeof null === "object" ненадёжно, всегда используй проверку на строгое равенство:
value === null
Это классический пример того, как ранние решения в дизайне языка становятся его постоянной частью, когда язык получает широкое распространение. Понимание этого бага говорит о том, что ты знаешь историю JavaScript и практические ограничения развития языка, который используется на миллиардах устройств.
Баг typeof null возник потому, что null и объекты имели одно и то же значение type tag (0) в системе представления памяти оригинального JavaScript engine.
Новый — ещё не проверен сообществом
Вы