Что такое NaN? Как определить, что значение равно NaN?

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

console.log(0 / 0);          // NaN
console.log(Math.sqrt(-1));   // NaN
console.log(parseInt("abc")); // NaN

Особенности NaN:

  1. NaN не равно самому себе: Это уникальное поведение, так как в JavaScript NaN !== NaN. То есть, проверка на равенство NaN с самим собой всегда возвращает false.

    console.log(NaN === NaN);  // false
  2. typeof NaN возвращает "number": Хотя это "не число", NaN относится к числовому типу.

    console.log(typeof NaN);  // "number"

Как определить, что значение равно NaN:

  1. Функция isNaN(): Она проверяет, является ли значение NaN. Однако isNaN() также возвращает true, если значение не может быть преобразовано в число, например, для строк.

    console.log(isNaN(NaN));        // true
    console.log(isNaN("abc"));      // true
  2. Функция Number.isNaN(): Этот метод проверяет строгое равенство с NaN. Он вернёт true, только если значение действительно является NaN, и не будет ошибочно возвращать true для некорректных строк или других типов данных.

    console.log(Number.isNaN(NaN));        // true
    console.log(Number.isNaN("abc"));      // false
    console.log(Number.isNaN(undefined));  // false

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

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