Почему isNaN (123) возвращает false? - PullRequest
7 голосов
/ 10 июня 2010

Почему вызов функции Javascript isNaN (123.) Возвращает false?(обратите внимание на точку (.) после 123).Это универсально приемлемое число или оно вызовет ошибки в нисходящем направлении?

Я проверяю, является ли значение допустимым десятичным числом, используя isNaN вместе с split.Существуют ли кросс-браузерные проблемы с isNaN?Должен ли я использовать сделанную на заказ реализацию?

Спасибо.

Ответы [ 3 ]

18 голосов
/ 10 июня 2010

В JavaScript грамматика Числового литерала выражается так:

DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt 

Как видите, часть DecimalDigits после точки является необязательной (суффикс opt).

var n = 123.;
typeof n; // "number"

Я бы не рекомендовал функцию isNaN для определения чисел, поскольку приведение типа может заставить некоторые вещи выглядеть странно :

isNaN(""); // false, a empty string coerces to zero
isNaN("\n\t"); // false, a white-space string coerces to zero
isNaN(true); // false, boolean true coerces to 1
isNaN(false); // false, boolean false coerces to zero
isNaN(new Date); // false, Date objects coerce to its numeric timestamp
// etc...

isNaN следует использовать только для сравнения с NaN, поскольку:

NaN == NaN; // false!
IsNaN(NaN); // true

Если вы хотите обнаружить Number объекты, Number значения или "разбираемые" числовые строки, взгляните на эту функцию .

1 голос
/ 10 июня 2010

NaN или (не число) - это конкретное значение с плавающей точкой, означающее значение, которое не может быть представлено компьютерами (с использованием стандарта IEEE 754 с плавающей точкой ).

Важно, чтобы функция isNaN() сделала все возможное для перевода чисел в число с плавающей запятой, поэтому ваш пример возвращает true.См., Например:

isNaN(100);                   //Returns false
isNaN("100");                 //Returns false
isNaN("ABC");                 //Returns true
isNaN("10C");                 //Returns true
isNaN(Math.sqrt(-1));         //Returns true

Если вы хотите получить доступ к числу, например "123.", как число с плавающей запятой, попробуйте использовать parseFloat():

parseFloat("123.");           //Returns 123

Кроме того, 123.является допустимым числом в javascript, который не требует дробной части после десятичной точки. То есть isNan() ведет себя правильно, и в этом случае должно возвращать false.

0 голосов
/ 10 июня 2010

Функция называется «Не число». Таким образом, это должно вернуть false, если вы вводите число, и true, если это не так. Даже с точкой за ним это число остается в силе. 123. только подтверждает как 123 или 123.0.

...