如何检查数字是否评估为无穷大?

Hom*_*r_J 87 javascript infinity

我有一系列的Javascript计算(仅在IE下)根据用户选择显示Infinity.

如何阻止Infinity出现的单词,例如,显示0.0

Luk*_*keH 165

if (result == Number.POSITIVE_INFINITY || result == Number.NEGATIVE_INFINITY)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

您可以使用该isFinite功能,具体取决于您想要如何对待NaN.isFinite返回false如果您的号码POSITIVE_INFINITY,NEGATIVE_INFINITYNaN.

if (isFinite(result))
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • @Eli:全局`Infinity`属性不是只读的,这意味着它可以被重新定义:例如,`var x = 42; 无穷大= 42; alert(x === Infinity);`display*"true"*.(不可否认,这是一个不起眼的案例,任何决定重新定义"无限","NaN"等的人都应该期待奇怪的事情发生.) (4认同)
  • 它们不是只读的(读取:*不可配置*),它们只是具有getter但没有setter的访问器.您可以使用`Object.defineProperty`和`__defineGetter__`重新定义它们.另一方面,"Infinity"*在严格模式下是*不可配置的. (4认同)
  • 为什么使用`Number.(正面|负面)_INFINITY`而不是` - ?Infinity`或` - ?1/0`? (2认同)
  • 忽略“Number.(POSITIVE|NEGATIVE)_INFINITY”也不是只读的事实,“Infinity”在严格模式下*是*只读的。另外,我向您介绍的“-?1/0”案例怎么样?无论如何,你几乎应该总是使用“isFinite”来代替。 (2认同)

rya*_*nve 9

简单n === n+1n === n/0有效:

function isInfinite(n) {
  return n === n/0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,本机isFinite()强制输入数字.isFinite([])并且isFinite(null)都是true例如.


Кон*_*Ван 6

执行简单的 ol\xe2\x80\x99 比较:

\n
(number === Infinity || number === -Infinity)\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
Math.abs(number) === Infinity\n
Run Code Online (Sandbox Code Playgroud)\n

这样做的理由

\n
    \n
  1. !(Number.isFinite(number))输入中断NaN
  2. \n
  3. Number.POSITIVE_INFINITY并且Number.NEGATIVE_INFINITY可以重新定义;它们是可配置的
  4. \n
  5. Infinity并且在严格模式-Infinity是只读的。
  6. \n
  7. 这是一个非常优雅的解决方案,代码长度和执行时间都是最短的。
  8. \n
\n
\n

代码高尔夫

\n

鉴于此typeof n"number"您也可以这样做,但请不要这样做,因为它很难看:

\n
(n+"").at(-1)=="y"\n
Run Code Online (Sandbox Code Playgroud)\n


zan*_*ngw 5

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

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

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true
Run Code Online (Sandbox Code Playgroud)