Number.isNaN()

Number.isNaN() - это метод, который проверяет, является ли значение именно NaN.

console.log(Number.isNaN(NaN));
console.log(Number.isNaN(25));

Результат:

true
false

Если передать настоящий NaN, метод вернет true. Во всех остальных случаях - false.

Что такое Number.isNaN()

NaN появляется, когда JavaScript пытался получить число, но не смог.

let value = Number('JavaScript');

console.log(value);

Результат:

NaN

Проверить такой результат можно через Number.isNaN():

let value = Number('JavaScript');

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

Результат:

true

Этот метод не пытается угадывать, можно ли значение превратить в число. Он просто проверяет: перед нами уже NaN или нет.

Синтаксис

Общая запись выглядит так:

Number.isNaN(value);

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

let result = Number.isNaN(NaN);

console.log(result);

Результат:

true

Чем отличается от isNaN()

Главное отличие: isNaN() сначала пытается преобразовать значение в число, а Number.isNaN() ничего не преобразует.

console.log(isNaN('JavaScript'));
console.log(Number.isNaN('JavaScript'));

Результат:

true
false

isNaN(‘JavaScript’) вернул true, потому что строка ‘JavaScript’ при преобразовании в число дает NaN.

Number.isNaN(‘JavaScript’) вернул false, потому что сама строка не является значением NaN.

Еще один пример:

console.log(isNaN('25'));
console.log(Number.isNaN('25'));

Результат:

false
false

Оба результата false, но причины разные. Для isNaN() строка ‘25’ сначала превращается в число. Для Number.isNaN() это просто строка, а не NaN.

Проверка после преобразования

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

let value = Number('42');

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

Результат:

false

Число получилось, значит это не NaN.

let value = Number('сорок два');

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

Результат:

true

Здесь получить число не удалось, поэтому в переменной лежит NaN.

То же самое работает с parseInt() и parseFloat():

let width = parseInt('120px', 10);
let height = parseInt('px120', 10);

console.log(Number.isNaN(width));
console.log(Number.isNaN(height));

Результат:

false
true

Из строки ‘120px’ число получить получилось, а из ‘px120’ - нет.

Number.isNaN() и prompt()

prompt() всегда возвращает строку. Поэтому сначала значение нужно преобразовать, а уже потом проверять через Number.isNaN().

let value = prompt('Введите число');
let numberValue = Number(value);

if (Number.isNaN(numberValue)) {
  console.log('Это не число');
} else {
  console.log(numberValue * 2);
}

Если пользователь введет 10, в консоли будет:

20

Если пользователь введет текст, в консоли будет:

Это не число

Пустой ввод лучше проверять отдельно. Дело в том, что Number(”) дает 0, а 0 не является NaN.

Итого

Number.isNaN() строго проверяет, является ли значение NaN. Он не преобразует строки, boolean, null или другие значения в число.

Number.isNaN(value);

Чаще всего метод используют после Number(), parseInt() или parseFloat(), чтобы понять, получилось ли нормальное число.