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 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |