我将在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
答案 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中的数字类型的常量。