【发布时间】:2016-02-16 19:26:50
【问题描述】:
少量实验
我打算用JS写一些数学表达式,想知道:
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 中编写数学表达式时是否存在潜在威胁?
【问题讨论】:
-
它们是浮点值 - 类型为
number。您会在所有其他使用标准浮点数学的语言中找到它。 -
您期望
Infinity * 2和Infinity * 5评估为不会有Infinity * 2 === Infinity * 5?想一想。根据定义,没有大于Infinity的数字。那么,Infinity * 2应该是什么?这似乎完全合乎逻辑。另一方面,NaN的行为方式在我看来很少合乎逻辑。这就是它的本质,你可能只需要了解它是如何工作的。不知道他们为什么这样做。 -
看看这对你是否有意义:
NaN === NaN // FALSE -
等等,
0 * 2 == 0 * 5,与 Infinity 相比,0确实是一个数字,所以这证明了2 == 5? -
@igorpavlov:
Infinity === 1/0,所以你需要将你对0的关心扩展到Infinity。
标签: javascript nan infinity