任何数字减去它本身应该是0
,对吗?
3 - 3 === 0
然后为什么
Infinity - Infinity === NaN
因为typeof Infinity
是'number'
:
答案 0 :(得分:13)
正如我们所知,两个数字之间的差异可以像这样计算
a - b = a + (-b)
JavaScript使用它来查找两个值之间的差异。引自Applying the Additive Operators to Numbers section from ECMA 5.1 Specification,
- 运算符在应用于两个数值类型的操作数时执行减法,产生其操作数的差异;左操作数是minuend,右操作数是subtrahend。给定数字操作数a和b,a-b始终产生与+( - b)相同的结果。
所以,当你这样做时
Infinity - Infinity
评估为
Infinity + (-Infinity)
在JavaScript中,它们都是不同的对象。引自The Number Type section of ECMA 5.1 Specification,
还有另外两个特殊值,称为正无穷大和负无穷大。为简洁起见,这些值也分别由符号
+∞
和−∞
用于说明目的。 (请注意,这两个无限数值是由程序表达式+Infinity
(或简称为Infinity
)和-Infinity
生成的。)
再次引用Applying the Additive Operators to Numbers section from ECMA 5.1 Specification
- 如果任一操作数为
NaN
,则结果为NaN
。- 两个相反符号的无穷大之和为
NaN
。- 同一符号的两个无穷大的总和是该符号的无穷大。
- ...
这就是为什么结果是NaN
。
答案 1 :(得分:7)
对于任何数字x
,我们应该x + 1 - x == 1
,对吧?那么,
Infinity + 1 == Infinity
那么Infinity + 1 - Infinity
应该是什么?是1
吗?然后我们有Infinity - Infinity == 1
,这看起来很怪异和随意。
实数中没有无穷大。浮点数有一个无穷大,因为当你执行像1 / 0
这样的事情时,某些数值算法很容易得到结果,但是浮点无穷大不能拥有你想要的所有好的属性数字具有。特别是,Infinity - Infinity
没有明智的回数,所以我们得到NaN
。
答案 2 :(得分:3)
无穷大不是数字。它是一个想法,它是一个概念。花大约8分钟从我最喜欢的YouTube频道(Numberphile)中了解什么是无限: https://www.youtube.com/watch?v=elvOZm0d4H0
答案 3 :(得分:2)
特殊数字值Infinity
封装了概念。
它用于比较。根据定义,你不能用它做任何算术。
假设密码到期值。如果选中“永不过期”框,则可以将内部值设置为Infinity
。任何比较actualDate < expiryDate
都会评估为true
(当然actualDate
Infinity
本身就是这样)。
这比将“不expiryDate
”状态定义为0
或-1
或null
或undefined
之类的任意值要好得多必须保持并记住你的应用程序在概念上意味着什么,在日期比较发生的每一行引入一个新的潜在错误。
答案 4 :(得分:1)
正确。无限不是一个数字。