Почему делает вызов функции JavaScript isNaN (123). возвратить false? (заметьте точку (.) после 123). Действительно ли это - универсально приемлемое число, или оно вызовет ошибки в нисходящем направлении?
Я проверяю, является ли значение допустимым десятичным числом с помощью isNaN наряду с разделением. Есть ли проблемы перекрестного браузера с isNaN? Я должен использовать сделанную на заказ реализацию?
Спасибо.
В 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
значения или "разбираемые" числовые строки, обратите внимание на эту функцию, которую я разместил некоторое время назад.
NaN
или (не число) - это конкретное значение с плавающей запятой, означающее значение, которое не может быть представлено компьютерами (с использованием IEEE 754 стандарт с плавающей запятой ).
Что важно для вас, функция isNaN ()
делает все возможное для преобразования чисел в числа с плавающей запятой, поэтому ваш пример возвращает истину. См., Например:
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.
Функция называется «Не является числом». Таким образом, это должно вернуть false, если вы вводите число, и true, если это не так. Этот номер остается действительным даже с точкой позади него. 123. просто проверяется как 123 или 123.0.