2016-07-13 2 views
0

Что может быть причиной того, что эти две функции ведут себя по-разному для значений бесконечности и -infinity. Кто-нибудь когда-либо нашел эту непоследовательность полезной?Почему parseInt (бесконечность) возвращает NaN, а parseFloat (бесконечность) возвращает бесконечность?

parseInt(Infinity); // NaN 
parseFloat(Infinity); // Infinity 
+0

http://www.peterkroener.de/javascript-parseint-vs-parsefloat/ – soyuka

ответ

5

Ответ на этот вопрос прямо в спецификации для двух функций:

parseInt принимает строку параметр.

Если первый символ не может быть преобразован в число, parseInt возвращает NaN.

parseFloat

parseFloat можно также разобрать и вернуть значение бесконечность. Вы можете использовать функцию isFinite, чтобы определить, является ли результат конечным числом (не Infinity, -Infinity или NaN).

parseInt не может вернуться infinityinfinity, потому что не находится в пределах диапазона целых чисел в JavaScript. тогда как он действителен в пределах диапазона с плавающей запятой.

Что касается Полезно? Я не могу сказать. В области, что я работаю в, NaN означает, случилась ошибка, и я не считаю, что я когда-либо использовали infinity

+0

В 'принимает строковый параметр' и' не может быть преобразован в число ', это не обязательно правильное объяснение. 'Number ('Infinity')' - это номер, который представляет _Infinite_ и 'parseFloat' также принимает строку' parseFloat ('Infinity') '. И 'Infinity.toString();' приведет к '' Infinity'', поэтому 'parseInt (Infinity)' приведет к 'parseInt (« Бесконечность »)'. –

+0

Бесконечность не находится в пределах целочисленного диапазона JavaScript. Зачем? Такие цифры, как 88888888888888888888888888888888888888888898899999999999999999999999999, должны быть бесконечными? –

+0

@Devashish Максимальное безопасное целое число в JS равно '9007199254740991', все выше всего - только с плавающей запятой. [Number.MAX_SAFE_INTEGER] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER) –

Смежные вопросы