NaN

Глобальна властивість NaN - це значення, що служить для відображення "не числа" (Not-A-Number).

Атрибути поля NaN
Доступний для запису ні
Доступний для переліку ні
Доступний для налаштування ні

Опис

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

Специфікації

Підтримка у веб-переглядачах

BCD tables only load in the browser

Дивіться також