Это число или нет?

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 или Микроинтерфейсы или изучите компонуемые внутренние интерфейсы с серверными компонентами. .

Попробуйте →

Узнать больше