Ответ 1
Если isFinite
работал способом isFiniteNumber
, тогда не было бы причин писать isFiniteNumber. Вероятно, там есть какой-то браузер, который рассматривает NaN как конечный.
Я встретил функцию goog.math.isFiniteNumber
в Google Closure Library. Что он делает, это проверить, является ли данное число конечным, а не NaN
.
Основной код:
goog.math.isFiniteNumber = function(num) {
return isFinite(num) && !isNaN(num);
};
Итак, сначала он проверяет, является ли число конечным, используя встроенную функцию isFinite
, а затем выполняет дополнительную проверку, чтобы убедиться, что число не NaN
, используя isNaN
.
Однако isFinite
уже возвращает false, если аргумент NaN
. Итак, какие преимущества дает проверка для isNaN
?
Если isFinite
работал способом isFiniteNumber
, тогда не было бы причин писать isFiniteNumber. Вероятно, там есть какой-то браузер, который рассматривает NaN как конечный.
Единственное различие заключается в следующем:
!isNan(1/0) // --> true
isFinite(1/0) // --> false
isNaN проверяет, является ли аргумент числом или нет. Инфиниты (+/-) также являются численными, поэтому они передают проверку isNaN, но не проходят проверку isFinite.
** Обратите внимание, что любая строка, которая может быть проанализирована как число ( "2", "3.14" ), приведет к тому, что isNaN вернет false.
Надеюсь, что это поможет.
PS: Ответ, заданный пользователем1170379, был почти идеальным.
Вероятно, по той же причине, что я реализовал (isfinite(num) && isfinite(-num))
- я получал ошибки от mysql, жалуясь на то, что помещал "-nan" в базу данных, хотя у меня была проверка на isfinite(field)
...
Полезная статья по этому вопросу http://jacksondunstan.com/articles/983, которая обеспечивает оптимизацию ((d*0.0)==0.0)
вы могли бы объяснить [Почему?] после прочтения этого:
NaN не проверяет, является ли переданное значение бесконечным или нет - он проверяет, принимает ли входной вал в конечный результат "Тип: Номер". Поскольку isNaN (строка) принимается, поэтому: isNaN ( "3.14" )//false (что означает true, данный токен - это утка, преобразованная в тип Number успешно)
Вы можете понять, что входное значение может быть неразрешенным шрифтом, даже математическая операция такая простая, как: (Х/у); который, в свою очередь, может дать число (+/- бесконечность).
Здесь x = 1, y = 0; значение (1/0). Затем isNaN (x/y) сначала оценивает isNaN (1/0); затем isNaN (бесконечность)//false. Поскольку (1/0) = бесконечность имеет тип: "число", т.е. Typeof (1/0)// "number" isNaN должен и будет возвращать false.
Вы не хотите ставить "бесконечность", где ожидается конечный результат.
isNaN() возвращает true, если аргумент не является числом или аргумент является нечисловым значением, например строкой или объектом. В противном случае он возвращает false.
Пример: isNaN(0/0) =>true;
isNaN(2-1) =>false;
isFinite() возвращает true, если аргумент представляет собой число, отличное от NaN, Infinity или -Infinity. В противном случае он возвращает false.
Пример: isFinite("2000") =>false;
isFinite (200/2) = > true; `