javascript 如何检查一个数是否为无穷大?

yrefmtwq  于 11个月前  发布在  Java
关注(0)|答案(8)|浏览(205)

我有一系列的JavaScript计算,(仅在IE下)根据用户的选择显示Infinity。
如何阻止单词Infinity出现,例如,显示0.0

moiiocjp

moiiocjp1#

if (result == Number.POSITIVE_INFINITY || result == Number.NEGATIVE_INFINITY)
{
    // ...
}

字符串
你也可以使用isFinite函数,这取决于你想如何处理NaN。如果你的数字是POSITIVE_INFINITYNEGATIVE_INFINITYNaNisFinite返回false

if (isFinite(result))
{
    // ...
}

nnt7mjpx

nnt7mjpx2#

ES6中,Number.isFinite()方法确定传递的值是否为有限数。

Number.isFinite(Infinity);  // false
Number.isFinite(NaN);       // false
Number.isFinite(-Infinity); // false

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true

字符串

mo49yndu

mo49yndu3#

一个简单的n === n+1n === n/0工作:

function isInfinite(n) {
  return n === n/0;
}

字符串
请注意,原生isFinite()强制输入数字。例如,isFinite([])isFinite(null)都是true

vc9ivgsu

vc9ivgsu4#

执行普通ol'比较:

(number === Infinity || number === -Infinity)

字符串
或者以函数调用为代价来保存几个字符:

Math.abs(number) === Infinity

理由

  1. !(Number.isFinite(number))NaN输入上断开。
  2. Number.POSITIVE_INFINITYNumber.NEGATIVE_INFINITY可以重新定义;它们是configurable
  3. Infinity-Infinitythe strict mode中是只读的。
    1.这是一个优雅的解决方案,在代码长度和执行时间上都是最短的。

代码高尔夫

假设typeof n"number",你也可以这样做,但请不要这样做,因为它很难看:

(n+"").at(-1)=="y"

2nc8po8w

2nc8po8w5#

实际上,n = n + 1将适用于大于51位的数字,例如。

1e16 + 1 === 1e16; // true
1e16 === Infinity; // false

字符串

6tr1vspr

6tr1vspr6#

我喜欢使用Lodash是出于各种 * 防御性编码 * 以及可读性的原因。ES6 Number.isFinite很棒,不存在非数字值的问题,但如果ES6不可能,您已经有了lodash,或者想要更简短的代码:_.isFinite

_.isFinite(Infinity); // false
_.isFinite(NaN); // false
_.isFinite(-Infinity); // false

_.isFinite(null); // false
_.isFinite(3); // true
_.isFinite('3'); // true

字符串

fcy6dtqo

fcy6dtqo7#

我遇到了一个场景,需要我检查值是NaN还是Infinity类型,但将字符串作为有效结果传递。因为许多文本字符串会产生假阳性NaN,我做了一个简单的解决方案来规避这个问题:

const testInput = input => input + "" === "NaN" || input + "" === "Infinity";

字符串
上面的代码将值转换为字符串,并检查它们是否严格等于NaN或Infinity(您需要为负无穷大添加另一种情况)。
于是:

testInput(1/0); // true
testInput(parseInt("String")); // true
testInput("String"); // false

k75qkfdt

k75qkfdt8#

可以在window中使用isFiniteisFinite(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,并且更准确地检查undefinednull等。
或者你可以像这样polyfill

Number.isFinite = Number.isFinite || function(value) {
  return typeof value === 'number' && isFinite(value);
}

相关问题