Почему делает isNaN (123). возвратить false?

Почему делает вызов функции JavaScript isNaN (123). возвратить false? (заметьте точку (.) после 123). Действительно ли это - универсально приемлемое число, или оно вызовет ошибки в нисходящем направлении?

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

Спасибо.

7
задан vivekraman 10 June 2010 в 05:10
поделиться

3 ответа

В 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 значения или "разбираемые" числовые строки, обратите внимание на эту функцию, которую я разместил некоторое время назад.

18
ответ дан 6 December 2019 в 09:58
поделиться

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.

1
ответ дан 6 December 2019 в 09:58
поделиться

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

0
ответ дан 6 December 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: