我有一系列的JavaScript计算,(仅在IE下)根据用户的选择显示Infinity。如何阻止单词Infinity出现,例如,显示0.0?
Infinity
0.0
moiiocjp1#
if (result == Number.POSITIVE_INFINITY || result == Number.NEGATIVE_INFINITY) { // ... }
字符串你也可以使用isFinite函数,这取决于你想如何处理NaN。如果你的数字是POSITIVE_INFINITY,NEGATIVE_INFINITY或NaN,isFinite返回false。
isFinite
NaN
POSITIVE_INFINITY
NEGATIVE_INFINITY
false
if (isFinite(result)) { // ... }
型
nnt7mjpx2#
在ES6中,Number.isFinite()方法确定传递的值是否为有限数。
ES6
Number.isFinite()
Number.isFinite(Infinity); // false Number.isFinite(NaN); // false Number.isFinite(-Infinity); // false Number.isFinite(0); // true Number.isFinite(2e64); // true
字符串
mo49yndu3#
一个简单的n === n+1或n === n/0工作:
n === n+1
n === n/0
function isInfinite(n) { return n === n/0; }
字符串请注意,原生isFinite()强制输入数字。例如,isFinite([])和isFinite(null)都是true。
isFinite()
isFinite([])
isFinite(null)
true
vc9ivgsu4#
(number === Infinity || number === -Infinity)
字符串或者以函数调用为代价来保存几个字符:
Math.abs(number) === Infinity
!(Number.isFinite(number))
Number.POSITIVE_INFINITY
Number.NEGATIVE_INFINITY
-Infinity
假设typeof n是"number",你也可以这样做,但请不要这样做,因为它很难看:
typeof n
"number"
(n+"").at(-1)=="y"
2nc8po8w5#
实际上,n = n + 1将适用于大于51位的数字,例如。
1e16 + 1 === 1e16; // true 1e16 === Infinity; // false
6tr1vspr6#
我喜欢使用Lodash是出于各种 * 防御性编码 * 以及可读性的原因。ES6 Number.isFinite很棒,不存在非数字值的问题,但如果ES6不可能,您已经有了lodash,或者想要更简短的代码:_.isFinite
Number.isFinite
_.isFinite(Infinity); // false _.isFinite(NaN); // false _.isFinite(-Infinity); // false _.isFinite(null); // false _.isFinite(3); // true _.isFinite('3'); // true
fcy6dtqo7#
我遇到了一个场景,需要我检查值是NaN还是Infinity类型,但将字符串作为有效结果传递。因为许多文本字符串会产生假阳性NaN,我做了一个简单的解决方案来规避这个问题:
const testInput = input => input + "" === "NaN" || input + "" === "Infinity";
字符串上面的代码将值转换为字符串,并检查它们是否严格等于NaN或Infinity(您需要为负无穷大添加另一种情况)。于是:
testInput(1/0); // true testInput(parseInt("String")); // true testInput("String"); // false
k75qkfdt8#
可以在window中使用isFinite,isFinite(123):你可以写一个类似这样的函数:
isFinite(123)
function isInfinite(num) { return !isFinite(num); }
字符串并使用像:
isInfinite(null); //false isInfinite(1); //false isInfinite(0); //false isInfinite(0.00); //false isInfinite(NaN); //true isInfinite(-1.797693134862316E+308); //true isInfinite(Infinity); //true isInfinite(-Infinity); //true isInfinite(+Infinity); //true isInfinite(undefined); //true
型您也可以Number.isFinit e,它也可以检查值是否为Number,并且更准确地检查undefined和null等。或者你可以像这样polyfill:
Number.isFinit
undefined
null
Number.isFinite = Number.isFinite || function(value) { return typeof value === 'number' && isFinite(value); }
8条答案
按热度按时间moiiocjp1#
字符串
你也可以使用
isFinite
函数,这取决于你想如何处理NaN
。如果你的数字是POSITIVE_INFINITY
,NEGATIVE_INFINITY
或NaN
,isFinite
返回false
。型
nnt7mjpx2#
在
ES6
中,Number.isFinite()
方法确定传递的值是否为有限数。字符串
mo49yndu3#
一个简单的
n === n+1
或n === n/0
工作:字符串
请注意,原生
isFinite()
强制输入数字。例如,isFinite([])
和isFinite(null)
都是true
。vc9ivgsu4#
执行普通ol'比较:
字符串
或者以函数调用为代价来保存几个字符:
型
理由
!(Number.isFinite(number))
在NaN
输入上断开。Number.POSITIVE_INFINITY
和Number.NEGATIVE_INFINITY
可以重新定义;它们是configurable。Infinity
和-Infinity
在the strict mode中是只读的。1.这是一个优雅的解决方案,在代码长度和执行时间上都是最短的。
代码高尔夫
假设
typeof n
是"number"
,你也可以这样做,但请不要这样做,因为它很难看:型
2nc8po8w5#
实际上,n = n + 1将适用于大于51位的数字,例如。
字符串
6tr1vspr6#
我喜欢使用Lodash是出于各种 * 防御性编码 * 以及可读性的原因。ES6
Number.isFinite
很棒,不存在非数字值的问题,但如果ES6不可能,您已经有了lodash,或者想要更简短的代码:_.isFinite字符串
fcy6dtqo7#
我遇到了一个场景,需要我检查值是
NaN
还是Infinity
类型,但将字符串作为有效结果传递。因为许多文本字符串会产生假阳性NaN
,我做了一个简单的解决方案来规避这个问题:字符串
上面的代码将值转换为字符串,并检查它们是否严格等于NaN或Infinity(您需要为负无穷大添加另一种情况)。
于是:
型
k75qkfdt8#
可以在window中使用isFinite,
isFinite(123)
:你可以写一个类似这样的函数:
字符串
并使用像:
型
您也可以
Number.isFinit
e,它也可以检查值是否为Number,并且更准确地检查undefined
和null
等。或者你可以像这样polyfill:
型