Что такое NaN в JavaScript и как с ним работать?

«Что такое NaN в JavaScript и как с ним работать?» — вопрос из категории JavaScript, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

NaN (Not a Number) — это специальное значение в JavaScript, которое представляет результат некорректной или неопределенной математической операции.

Ключевые особенности:

  1. Тип: typeof NaN возвращает "number". Это парадоксально, но NaN является числовым типом.
  2. Сравнение: NaN не равно ничему, включая само себя. NaN === NaN возвращает false.
  3. Распространение: Почти любая математическая операция с NaN в качестве операнда вернет NaN.

Проверка на NaN: Из-за особенности сравнения, для проверки нужно использовать специальные функции:

  • Number.isNaN(value) (рекомендуется) — возвращает true, только если значение в точности равно NaN.
  • Глобальная isNaN(value) — сначала пытается преобразовать значение в число, а затем проверяет. Это может давать неожиданные результаты (isNaN("строка") вернет true).

Примеры в контексте Node.js:

// Как возникает NaN
console.log(0 / 0); // NaN
console.log(Math.sqrt(-1)); // NaN
console.log(parseInt('не число')); // NaN

// Проверка
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN('текст')); // false (в отличие от isNaN)
console.log(isNaN('текст')); // true (потому что 'текст' -> NaN)

// Практический пример: валидация ввода
function parseNumber(input) {
  const num = Number(input);
  if (Number.isNaN(num)) {
    throw new Error('Введено нечисловое значение');
  }
  return num;
}

В Node.js при работе с данными (например, из запросов или файлов) важно использовать Number.isNaN() для точной валидации числовых значений.