Что вернет typeof для null?
Основы языка
`typeof null` возвращает строку `'object'`. Это известная историческая ошибка JavaScript, сохранённая для обратной совместимости.
Почему так
В самой первой реализации JavaScript значения хранились с тегом типа в младших битах. У объектов тег был 000, а null представлялся как нулевой указатель — те же биты 000. Поэтому typeof null определяло его как объект.
typeof null; // 'object' — баг
typeof {}; // 'object'
typeof undefined; // 'undefined'Ошибку не стали исправлять: это сломало бы огромное количество существующего кода.
Как правильно проверять null
typeof для этого не подходит — нужно строгое сравнение:
if (value === null) { /* точно null */ }
// проверить и null, и undefined сразу
if (value == null) { /* null или undefined */ }Практический вывод
- Не используйте
typeof x === 'object'для проверки на объект — массивы иnullтоже дадут'object'. - Надёжная проверка на объект:
value !== null && typeof value === 'object';Коротко для собеседования
typeof null === 'object' — историческая ошибка из-за представления null нулевым указателем с тем же тегом, что у объектов. Не исправлена ради совместимости. Для проверки на null используют value === null, а не typeof.