Что такое 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
:
-
NaN
не равно самому себе: Это уникальное поведение, так как в JavaScriptNaN !== NaN
. То есть, проверка на равенствоNaN
с самим собой всегда возвращаетfalse
.console.log(NaN === NaN); // false
-
typeof NaN
возвращает"number"
: Хотя это "не число",NaN
относится к числовому типу.console.log(typeof NaN); // "number"
Как определить, что значение равно NaN
:
-
Функция
isNaN()
: Она проверяет, является ли значениеNaN
. ОднакоisNaN()
также возвращаетtrue
, если значение не может быть преобразовано в число, например, для строк.console.log(isNaN(NaN)); // true console.log(isNaN("abc")); // true
-
Функция
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
.