Learn JavaScript

Number.isNaN() - метод для точной проверки NaN в JavaScript

Number.isNaN() проверяет, является ли значение именно NaN.

Это самый безопасный и точный способ такой проверки в JavaScript.

Синтаксис

Number.isNaN(value)

value - значение, которое нужно проверить.

Что делает Number.isNaN()

Метод возвращает true только в одном случае: если переданное значение действительно равно NaN.

console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN(123)); // false
console.log(Number.isNaN("hello")); // false

Что возвращает Number.isNaN()

Number.isNaN() всегда возвращает булево значение:

  • true, если значение действительно NaN
  • false, если это что-то другое
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN(0));   // false

Это главное, что важно запомнить про метод.

Почему обычное сравнение не работает

NaN ведёт себя необычно: он не равен даже самому себе.

console.log(NaN === NaN); // false

Из-за этого проверка через === здесь бесполезна.

Именно поэтому для NaN используют Number.isNaN().

Откуда вообще появляется NaN

NaN часто возникает после неудачного числового преобразования.

const value = Number("hello");

console.log(value); // NaN
console.log(Number.isNaN(value)); // true

Ещё пример:

const value = parseFloat("abc");

console.log(value); // NaN
console.log(Number.isNaN(value)); // true

Number.isNaN() и isNaN()

Это одна из самых важных пар для сравнения.

Есть:

  • глобальная функция isNaN()
  • метод Number.isNaN()

Они работают по-разному.

console.log(isNaN("hello"));        // true
console.log(Number.isNaN("hello")); // false

Почему так происходит:

  • isNaN() сначала пытается преобразовать значение в число
  • Number.isNaN() ничего не преобразует и проверяет только сам факт NaN

Поэтому Number.isNaN() обычно безопаснее и предсказуемее.

Без неявного приведения типов

Это главный плюс метода.

console.log(Number.isNaN(undefined)); // false
console.log(Number.isNaN({}));        // false
console.log(Number.isNaN("NaN"));     // false

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

Метод просто отвечает: это NaN или нет.

Правильный шаблон проверки

Обычно Number.isNaN() используют после того, как значение уже попытались превратить в число.

const value = Number(input);

if (Number.isNaN(value)) {
  console.log("Это не число");
}

Такой вариант читается очень ясно.

Number.isNaN() и Number()

Частая связка выглядит именно так:

const raw = "123px";
const value = Number(raw);

console.log(value); // NaN
console.log(Number.isNaN(value)); // true

То есть сначала вы получаете числовой результат, а потом отдельно проверяете, удалось ли преобразование.

Number.isNaN() и parseInt() / parseFloat()

После parseInt() и parseFloat() метод тоже полезен.

const a = parseInt("hello", 10);
const b = parseFloat("abc");

console.log(Number.isNaN(a)); // true
console.log(Number.isNaN(b)); // true

Это нормальный способ проверить, получилось ли считать число.

Number.isNaN() не меняет значение

Метод только проверяет результат и ничего не преобразует.

const value = NaN;
const result = Number.isNaN(value);

console.log(value);  // NaN
console.log(result); // true

Когда это полезно

Number.isNaN() удобно использовать, когда:

  • нужно проверить результат Number(), parseInt() или parseFloat()
  • важно избежать неявного приведения типов
  • нужна точная проверка именно на NaN

Пример:

const age = Number(userInput);

if (Number.isNaN(age)) {
  console.log("Введите корректный возраст");
}

Частые ошибки

Проверять NaN через ===

const value = NaN;

console.log(value === NaN); // false

Такой способ не работает.

Использовать глобальный isNaN() там, где нужна точная проверка

console.log(isNaN("hello"));        // true
console.log(Number.isNaN("hello")); // false

Если нужна именно проверка значения NaN, обычно лучше Number.isNaN().

Проверять сырую строку вместо результата преобразования

const input = "hello";

console.log(Number.isNaN(input)); // false

Правильнее сначала попытаться получить число:

const value = Number(input);

console.log(Number.isNaN(value)); // true

Быстрая памятка

  • Number.isNaN() проверяет, является ли значение именно NaN
  • метод возвращает true или false
  • NaN === NaN даёт false, поэтому нужен специальный метод
  • Number.isNaN() не приводит типы автоматически
  • в большинстве случаев он безопаснее глобального isNaN()

Коротко

Number.isNaN() - это правильный способ проверить значение на NaN в JavaScript. Главное, что стоит запомнить: метод ничего не приводит автоматически и возвращает true только для настоящего NaN, а не для любых “плохих” значений.