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 |