isNaN()

Функція isNaN() перевіряє, чи дорівнює значення NaN, спочатку за потреби перетворюючи його на число. Оскільки таке перетворення може бути неочікуваним, часто доцільніше застосовувати Number.isNaN().

Спробуйте його в дії

Синтаксис

isNaN(value)

Параметри

value

Значення, яке потрібно перевірити.

Повернене значення

true, якщо задане значення після перетворення на число є NaN; інакше false.

Опис

isNaN() є властивістю-функцією глобального об'єкта.

У разі числових значень isNaN() перевіряє, чи є число значенням NaN. Коли аргумент функції isNaN() не належить до типу Number, значення спочатку зводиться до числа, і отримане значення порівнюється з NaN.

Така поведінка isNaN() щодо нечислових аргументів може плутати! Наприклад, порожній рядок зводиться до 0, а булеве значення — до 0 або 1; обидва ці типи інтуїтивно сприймаються як «не числа», проте вони не обчислюються до NaN, і тому isNaN() повертає false. Отже, isNaN() не відповідає ні на питання «чи є вихідне значення саме числовим значенням NaN», ні на питання «чи є вихідне значення нечислом».

Number.isNaN() — це більш надійний спосіб з'ясувати, чи справді значення є числовим значенням NaN. Інший варіант: можна скористатися виразом x !== x, і жоден з обох методів не дає хибних спрацювань, які роблять глобальну isNan() ненадійною. Аби перевірити, чи є значення числом, слід користуватися виразом typeof x === "number".

Функція isNaN() відповідає на питання "чи є вихідне значення функціонально еквівалентним NaN, коли скористатися цим значенням у числовому контексті". Якщо isNaN(x) повертає false, то змінну x можна безпечно використовувати в арифметичних операціях, наче це валідне число, що не є NaN. Якщо isNaN(x) повертає true, то x зводиться до NaN, і більшість обчислень з ним теж повернуть NaN (адже значення NaN – заразне). Цим можна скористатися, наприклад, щоб перевірити, чи можна обробляти аргумент арифметично (користуватися ним, "неначе" числом), і обробляти значення, що не схожі на числа, викидаючи помилку, підставляючи усталене значення тощо. У такий спосіб можна створити гнучку функцію, яка повною мірою користується з різносторонності JavaScript – неявного перетворення значень залежно від контексту.

[!NOTE]

Оператор + виконує як додавання чисел, так і зчеплення рядків. Тож навіть якщо isNaN() повертає false для обох операндів, оператор + все одно може повернути рядок, оскільки спрацьовує не як арифметичний оператор. Наприклад, isNaN("1") повертає false, але "1" + 1 повертає "11". Щоб мати певність, що відбувається робота з числами, зведіть значення до числа і скористайтеся Number.isNaN() для перевірки результату.

Приклади

Зверніть увагу, як isNaN() повертає true для значень, які не є значенням NaN, але також не є числами:

isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true

isNaN(true); // false
isNaN(null); // false
isNaN(37); // false

// Рядки
isNaN("37"); // false: "37" перетворюється на число 37, яке не є NaN
isNaN("37.37"); // false: "37.37" перетворюється на число 37.37, яке не є NaN
isNaN("37,5"); // true
isNaN("123ABC"); // true: Number("123ABC") дає NaN
isNaN(""); // false: порожній рядок перетворюється на 0, який не є NaN
isNaN(" "); // false: рядок із пробілами перетворюється на 0, який не є NaN

// Дати
isNaN(new Date()); // false; об'єкт Date можна перетворити на число (мітку часу)
isNaN(new Date().toString()); // true; рядкове представлення об'єкта Date не можна розібрати як число

// Масиви
isNaN([]); // false; примітивне подання — "", яке перетворюється на число 0
isNaN([1]); // false; примітивне подання — "1"
isNaN([1, 2]); // true; примітивне подання — "1,2", яке не можна перетворити на число

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

Сумісність із браузерами

desktop mobile server
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
isNaN
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support 3
Opera Full support 3
Safari Full support 1
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support 10.1
Safari on iOS Full support 1
Samsung Internet Full support 1.0
Deno Full support 1.0
Node.js Full support 0.10.0

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