Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «NaN». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`NaN`** - це спеціальне числове значення в JavaScript, що означає «Not a Number» («не число»), хоча сам `NaN` **має тип** `"number"`. **Ключове:** `NaN === NaN` повертає `false`, бо за стандартом IEEE-754 NaN не дорівнює навіть самому собі; правильно перевіряти значення через `Number.isNaN()`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Що таке `NaN` `NaN` - це спеціальне числове значення в JavaScript, що означає: > **«Not a Number»** - *«не число».* Але водночас `NaN` **сам має тип** `"number"`. ```javascript typeof NaN; // "number" ``` > Тобто `NaN` - це просто **невалідне числове значення**. > Воно з'являється, коли результат математичної операції **не може бути виражений числом**. --- ## Коли з'являється `NaN` Кілька типових випадків: ```javascript Number('hello'); // NaN - не вдалося перетворити рядок на число parseInt('abc'); // NaN 0 / 0; // NaN - математично невизначено Math.sqrt(-1); // NaN - не можна добути корінь з від'ємного числа 'abc' * 3; // NaN - рядок не можна помножити undefined + 5; // NaN ``` --- ## Як перевірити значення на `NaN` ### **isNaN(value)** - стара функція ```javascript isNaN(NaN); // true isNaN('hello'); // true (!) isNaN('123'); // false ``` Проблема: `isNaN` **спочатку приводить значення до числа**, а потім перевіряє, чи є воно `NaN`. Тому рядок `'hello'` → `NaN`, і результат - `true`. --- ### **Number.isNaN(value)** - сучасний і правильний спосіб ```javascript Number.isNaN(NaN); // true Number.isNaN('hello'); // false Number.isNaN(undefined); // false Number.isNaN(5); // false Number.isNaN(0 / 0); // true ``` > `Number.isNaN()` **не приводить** аргумент до числа, > і працює тільки якщо значення **дійсно дорівнює NaN**. --- ## Чому `NaN === NaN` повертає `false` Це може здатися дивним, але це **особливість IEEE 754** - стандарту, за яким JavaScript реалізує числа з рухомою комою. > Згідно зі стандартом IEEE-754, **NaN не дорівнює навіть самому собі**. Тому що `NaN` - це не конкретне значення, а **маркер помилки обчислення**, і таких «помилкових» станів може бути багато (різні комбінації бітів → різні види NaN). Тому: ```javascript NaN === NaN; // false NaN == NaN; // false ``` --- ## Як коректно перевірити, що значення - `NaN` Правильний спосіб: ```javascript Number.isNaN(value); ``` або якщо хочеш коротко: ```javascript const isReallyNaN = x => x !== x; isReallyNaN(NaN); // true, тому що тільки NaN !== NaN ``` > Фішка: `NaN` - це **єдине значення в JS**, > яке **не дорівнює самому собі**. --- ## Підсумок | Перевірка | Результат | Коментар | |---|---|---| | `typeof NaN` | `"number"` | Тип - число, хоча позначає «не число» | | `NaN === NaN` | `false` | Згідно з IEEE-754 | | `isNaN('text')` | `true` | Приведення до числа (поганий варіант) | | `Number.isNaN('text')` | `false` | Сучасний правильний варіант | | `Number.isNaN(NaN)` | `true` | Перевірка без приведення типів |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.