Глобальна властивість NaN - це значення, що служить для відображення "не числа" (Not-A-Number).
Атрибути поля NaN |
|
|---|---|
| Доступний для запису | ні |
| Доступний для переліку | ні |
| Доступний для налаштування | ні |
Джерело цих інтерактивних прикладів зберігається у репозиторії на GitHub. Якщо ви маєте бажання зробити свій внесок у проект інтерактивних прикладів - будь ласка, зклонуйте репозиторій https://github.com/mdn/interactive-examples та пришліть нам pull request.
Опис
NaN є властивістю глобального об'єкта. Іншими словами, це змінна глобальної області видимості.
Початковим значенням NaN є "не число" — так само, як і значення Number.NaN. У сучасних переглядачах NaN — це властивість, недоступна для запису та налаштування. Навіть якщо у вашому випадку це не так, уникайте її перевизначення. У програмах NaN застосовується досить рідко.
Існує п'ять різних типів операцій, що повертають NaN:
- Число не може бути розібране (наприклад,
parseInt("blabla")чиNumber(undefined)) - Математична операція, в якій результат не є дійсним числом (наприклад,
Math.sqrt(-1)) - Операндом аргументу є NaN (наприклад,
7 ** NaN) - Невизначеності (наприклад, 0 *
Infinity) - Будь-яка операція, що містить рядок та не є операцією додавання (наприклад, "ква"/3)
Приклади
Первірка на NaN
NaN не дорівнює (через ==, !=, === та !==) будь-якому значенню, в тому числі іншому значенню NaN. Використовуйте Number.isNaN() або isNaN(), щоб якнайточніше визначити, чи значення є NaN. Або ж виконуйте порівняння аргументу із самим собою: тільки NaN не дорівнює собі.
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
function valueIsNaN(v) { return v !== v; }
valueIsNaN(1); // false
valueIsNaN(NaN); // true
valueIsNaN(Number.NaN); // true
Однак, пам'ятайте про відмінність між isNaN() та Number.isNaN(): перший поверне true, якщо аргумент є NaN, або якщо він стане NaN після приведення до чисельного типу, в той час як другий поверне true лише у випадку, якщо аргумент на даний момент є NaN:
isNaN('привіт'); // повертає 'true'.
Number.isNaN('привіт'); // повертає 'false'.
Додатково, деякі методи масивів не знаходять NaN, в той час, як інші знаходять.
let arr = [2, 4, NaN, 12]; arr.indexOf(NaN); // -1 (false) arr.includes(NaN); // true arr.findIndex(n => Number.isNaN(n)); // 2
Специфікації
| Специфікація |
|---|
| ECMAScript (ECMA-262) The definition of 'NaN' in that specification. |
Підтримка у веб-переглядачах
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NaN | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support 0.1.100 |
Legend
- Full support
- Full support