Это число или нет?
NaN — это свойство глобального объекта, представляющее несостоятельность математического оператора. Буквально это означает «не-число». Это также может быть болью в прикладе, чтобы придавить.
Вот почему.
Значит, NaN — это не число? Кажется очевидным, я имею в виду, в конце концов, это в названии. Быстрая проверка его типа данных подтвердит это:
Довольно иронично, что вещь под названием «Not-A-Number» на самом деле является числовым типом данных. Так почему это? В JavaScript это не только часть глобального объекта, но и свойство Number
.
По этой причине NaN фактически считается числом. Не беспокойтесь, если вы немного запутались, пытаясь понять это. NaN — это тип числа, поэтому думайте о нем как о числе с неопределенным значением, которое возвращается из нелогичного математического оператора, чтобы указать на проблему с вычислением.
Итак, NaN на самом деле является числом. Его значение похоже на undefined
, так что же произойдет, если мы проверим NaN и добавим пограничные случаи, если оно будет возвращено. Давайте попробуем.
Правильно, вы ничего не видите. По сравнению с самим собой NaN возвращает false
. Независимо от того, используете ли вы строгое или обычное равенство, результат будет одинаковым.
NaN — это единственное значение в JavaScript, которое не равно самому себе. Причина этого довольно сложна и связана со стандартом арифметики с плавающей запятой (IEEE 754). Проще говоря, при оценке чисел в математике значения всегда больше, меньше или равны. NaN — это тип числа, значение которого невозможно определить. Поэтому математически невозможно сказать, что значение NaN такое же, больше или меньше, чем другое значение NaN. Я рекомендую вам ознакомиться с этой дискуссией для гораздо более подробного объяснения причин, лежащих в основе этого.
Поскольку NaN нельзя сравнивать с самим собой, как можно проверить значение, чтобы увидеть, является ли оно NaN? Есть два метода: глобальный isNaN()
и Number.isNaN()
.
Оба метода возвращают логическое значение, определяющее, является ли переданное значение NaN. Внешне они выглядят одинаково, но работают по-разному.
Почему "100x"
возвращает true
вместо isNaN()
и false
вместо Number.isNaN()
? Когда тип данных значения, переданного глобальному методу isNaN()
, не является числом, он сначала попытается преобразовать его в число, а затем проверит, является ли оно NaN.
Строка "100x"
не может быть преобразована в допустимое число и впоследствии объявляется как NaN, а isNaN()
возвращает true
. Метод Number.isNaN()
не преобразует входное значение. Вместо этого он возвращает true только в том случае, если тип данных является как числом, так и NaN. Поскольку "100x"
— это строка, а не число, возвращаемое значение — false
.
Из-за встроенного преобразования входных данных в числа с isNaN()
в большинстве случаев рекомендуется использовать Number.isNan()
.
NaN может быть сложно понять. Это означает Not-A-Number, но на самом деле это тип числа. Это единственное значение в JavaScript, которое нельзя сравнивать с самим собой. Его наличие можно проверить только двумя методами, которые функционируют по-разному и могут возвращать нежелательные результаты, если их неправильно понять. Хорошая новость заключается в том, что знание этих концепций закладывает основу для понимания того, что такое NaN, как оно работает и как с ним обращаться.
Создавайте компонуемые веб-приложения
Не создавайте веб-монолиты. Используйте Bit для создания и компоновки несвязанных программных компонентов — в ваших любимых средах, таких как React или Node. Создавайте масштабируемые и модульные приложения с мощными и приятными возможностями разработки.
Перенесите свою команду в Bit Cloud, чтобы вместе размещать компоненты и совместно работать над ними, а также ускорять, масштабировать и стандартизировать разработку в команде. Попробуйте компонуемые внешние интерфейсы с помощью Design System или Микроинтерфейсы или изучите компонуемые внутренние интерфейсы с серверными компонентами. .