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, если значение действительноNaNfalse, если это что-то другое
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, а не для любых “плохих” значений.