Прежде всего, это просто не тривиально проверить это.
NaN === NaN // false
Это один из тех Headscratchers, которые такие только потому, что. Короче говоря, есть Spec для номеров с плавающей запятой, которые определяют, что НАН Значения никогда не равны.
Тогда в течение долгого времени у нас было только isnan () Метод, который охватывает приведенный выше случай, но он дает вам неожиданные результаты.
isNaN(NaN) // true
isNaN('foo') // true
Это сбивает с толку. Чтобы перемещаться по этой проблеме, в дни ES5 люди обычно делали что -то вроде:
const isReallyNaN = value => {
const n = isNaN(value)
return n !== n
}
К счастью, с тех пор, как ES6 появился, у нас теперь есть новый метод в Номер прототип, который работает последовательно по всем случаям:
Number.isNaN('foo') // false
Number.isNaN(NaN) // true
Важно отметить, оба Иснан и Number.isnan доступны, осторожны, чтобы не смешивать их! 💥
использованная литература
Оригинал: “https://dev.to/atila/not-a-number-3j69”