Почему `null` попал в категорию объектов
В JavaScript `null` означает намеренное отсутствие значения: например, программа может явно записать его в переменную, чтобы показать, что объект пока не задан. Поэтому результат `typeof null` выглядит нелогично: он равен `"object"`, хотя `null` не является объектом и у него нельзя запрашивать свойства.
Такое поведение связано с ранней реализацией языка. В ней проверка типа опиралась на внутреннее представление значений, и для `null` ошибочно получилась метка объекта. Это не особое свойство самого `null`, а след того, как язык был устроен на старте.
Почему ошибку не исправили
К моменту, когда несоответствие заметили, проверка уже использовалась в программах. Код мог, например, выбирать ветку выполнения по условию `typeof value === "object"`. Если бы после обновления `null` стал возвращать другой результат, такая программа могла бы начать вести себя иначе: пропускать прежнюю ветку, не выполнять ожидаемую обработку или выдавать ошибку дальше по цепочке.
Для языка, на котором уже написаны приложения и библиотеки, исправление не обязательно безопаснее сохранения странности. Совместимость означает, что старый код продолжает работать так, как его авторы привыкли, даже если исходное поведение возникло из-за ошибки.
Как проверять значения сейчас
Поэтому разработчики проверяют `null` отдельно: `value === null`. Если нужно убедиться, что значение — объект, обычно исключают `null`: `value !== null && typeof value === "object"`. Это важно ещё и потому, что `typeof` возвращает `"object"` для массивов.
В итоге одна ранняя ошибка стала частью практического контракта языка: её нельзя просто стереть, не рискуя изменить поведение программ, написанных задолго до появления исправления.






