Как проверить значение на NaN в JavaScript?

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

Ответ

В JavaScript NaN (Not-a-Number) — это уникальное значение, представляющее нечисловой результат. Ключевая особенность: NaN не равно ничему, включая само себя (NaN === NaN возвращает false).

Правильные способы проверки:

  1. Number.isNaN(value) (Рекомендуется). Эта функция выполняет строгую проверку: возвращает true только если переданное значение в точности равно NaN.

    console.log(Number.isNaN(NaN));        // true
    console.log(Number.isNaN('text' / 2)); // true (результат операции — NaN)
    console.log(Number.isNaN('text'));     // false (строка — не NaN)
    console.log(Number.isNaN(123));        // false
  2. Object.is(value, NaN). Альтернативный метод, также корректно определяющий NaN.

    console.log(Object.is(NaN, NaN)); // true
  3. Самопроверка (value !== value). Старый трюк, основанный на уникальности NaN. Работает, но менее читаем.

Чего НЕ делать:

  • Не используйте глобальную функцию isNaN(). Она сначала неявно преобразует значение в число, что может дать неожиданные результаты.
    console.log(isNaN('123')); // false (строка преобразуется в число 123)
    console.log(isNaN('text')); // true (строка не преобразуется в число)
    console.log(isNaN(NaN)); // true

    Number.isNaN() лишена этого недостатка.