Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «typeof null». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`typeof null`** повертає `"object"` через **історичну помилку** в JavaScript, що з'явилася ще в першій версії мови (1995 р.) і залишилася заради сумісності. **Ключове:** Через цей баг для перевірки на `null` не можна покладатися лише на `typeof`; правильний спосіб - `value === null`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Коротка відповідь ```javascript typeof null === "object" ``` Результат: `"object"` --- ## Чому так відбувається Це - **історична помилка** в JavaScript, яка з'явилася ще в найпершій версії мови (1995 р.) і **так і залишилася заради сумісності**. --- ### Історична причина У ранніх версіях JS значення зберігалися у вигляді **32-бітних тегованих даних**: - перші **3 біти** вказували на **тип даних** - решта **29 біт** - на саме значення Для об'єктів використовувався **типовий тег** `000` (три нулі на початку 32-бітного значення). А в `null` - **усе значення складалося з нулів** (`0x00`). Тому під час перевірки `typeof null` рушій бачив: «ага, перші три біти - `000` → це об'єкт». Так і з'явилося: ```javascript typeof null // "object" ``` --- ## Чому це не виправили Тому що мільйони старих скриптів по всьому інтернету можуть залежати від цієї поведінки. Виправлення призвело б до масових поломок. > Тому специфікація ECMAScript залишила це як **«відому помилку»**, > але **офіційно задокументувала** її. --- ## Як правильно перевіряти `null` Через цей баг **не можна використовувати лише** `typeof` для перевірки на `null`. ### Неправильно: ```javascript if (typeof value === 'object') { // може бути null! } ``` ### Правильно: ```javascript if (value === null) { console.log('Це null'); } ``` або якщо хочеш відрізнити null від інших об'єктів: ```javascript if (typeof value === 'object' && value !== null) { console.log("Це об'єкт, але не null"); } ``` --- ## Приклад для наочності ```javascript console.log(typeof null); // "object" console.log(typeof {}); // "object" console.log(typeof []); // "object" console.log(null === {}); // false console.log(null === undefined); // false ``` > Усі три (`null`, `{}`, `[]`) повертають `"object"`, > але це **різні типи даних**. --- ## Підсумок | Перевірка | Результат | Пояснення | |---|---|---| | `typeof null` | `"object"` | Історична помилка в реалізації | | `null === null` | `true` | Саме значення дорівнює собі | | `typeof undefined` | `"undefined"` | Очікувана поведінка | | `typeof {}` | `"object"` | Справжній об'єкт | | `typeof []` | `"object"` | Масив - підтип об'єкта |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.