JavaScript - Infinity和NaN应该是数字吗?

时间:2015-11-15 17:42:31

标签: javascript nan infinity

几个实验

我将在JS中编写一些Maths表达式,并想知道:

typeof(Infinity)              // "number", in Maths it is NOT a number
typeof(NaN)                   // "number", how NaN (Not A Number) can actually be a number?

还有一些实验:

Infinity === Infinity         // TRUE
Infinity * 2 === Infinity * 5 // TRUE, so 2===5 if Infinity !== 0?

但是,这对我来说很有意义:

NaN * 2 === NaN * 5           // FALSE

问题

  • 为什么JS是这样设计的?这有什么特别的原因吗?
  • 在JS中编写Maths表达式时是否存在潜在的威胁?

2 个答案:

答案 0 :(得分:2)

  

为什么JS的设计如此?这有什么特别的原因吗?

JavaScript将NaN(包括它永远不等于它自身的事实)和无穷大直接来自IEEE-754,这是计算中浮点数的首选标准,许多人也使用它其他语言。 (具体来说,它使用“quiet NaN”。)IEEE-754反过来从数学理论中得到了很多(例如,Infinity + 1 === Infinity,显然这是considered true for some kinds of numbers,但我不是数学家;我认为标准的设计者有理由遵循这个定义。)

  

在JS中编写Maths表达式时是否存在潜在的威胁?

我不会将它们称为威胁,但是:NaN将在任何计算中传播。除此之外,您在this question and its answers中讨论了常见的精度问题。

答案 1 :(得分:1)

这里有关于两个NaN不等式的答案 - Why is NaN === NaN false?。至于无穷大,这是一个纯粹的数学 - 无限时代任何东西都是无限的。最后,typeof返回"数字"对于Infinity和NaN,因为它们是JS中的数字类型的常量。