Глобальная функция JavaScript isNaN()

Определение и применение

Глобальная функция isNaN() сначала преобразует аргумент в число, затем проверяет, получилось ли NaN (англ. Not-a-Number — «не число», специальное числовое значение). Возвращает true, если результат преобразования — NaN, иначе false.

isNaN() не проверяет, является ли исходное значение числом: пустая строка, пробельная строка и null преобразуются в 0, поэтому дают false. Infinity также даёт false: бесконечность не является NaN.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.isNaN
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
isNaN✓1✓12✓1✓3✓1✓18✓4✓10.1✓1✓1.0✓4.4✓1

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис:

JavaScript
isNaN( value );

Спецификация

ECMAScript — isNaN().

Значения параметров

isNaN(): справочные сведения
Параметр Описание
value Значение, которое сначала преобразуется в число, а затем проверяется на NaN. Обязательный параметр.

Исключения

Исключения isNaN()
Тип исключения Описание
TypeError Аргумент BigInt (большое целое) или Symbol (символьное значение) не допускает такого неявного преобразования в число. Ошибка также возможна при невозможности получить примитивное значение из объекта.

Примеры, попробуйте сами

Почему isNaN() и Number.isNaN() дают разные ответы

Измените проверяемые строки и сравните проверку с преобразованием в число и без него.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
// Функция возвращает true

console.log(isNaN(NaN))
console.log(isNaN(Number.NaN))
console.log(isNaN(0 / 0))
console.log(isNaN(Infinity / Infinity))
console.log(isNaN(-Infinity / Infinity))

// Функция возвращает false

console.log(isNaN(Infinity))
console.log(isNaN(-Infinity))
console.log(isNaN(true))
console.log(isNaN(null))
console.log(isNaN(123))
console.log(isNaN('123'))
console.log(isNaN('1.23'))
console.log(isNaN(''))
console.log(isNaN(' '))

// Отличие метода Number.isNaN от функции isNaN()

console.log(Number.isNaN('NaN')) // false
console.log(isNaN('NaN')) // true

console.log(Number.isNaN(undefined)) // false
console.log(isNaN(undefined)) // true

console.log(Number.isNaN({})) // false
console.log(isNaN({})) // true

// Большие целые и символы не допускают неявного преобразования в число.
for (const value of [1n, Symbol('id')]) {
    try {
        console.log(isNaN(value))
    } catch (error) {
        console.log(error.name)
    }
    console.log(Number.isNaN(value)) // false: преобразования нет.
}

В качестве альтернативной проверки переменной на NaN без использования функции isNaN() вы можете воспользоваться следующей конструкцией:

Почему NaN не равен самому себе

Замените NaN числом или строкой и сравните результаты проверок.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
const x = NaN
console.log(x != x) // true
console.log(x !== x) // true