任何数字减去它本身应该是0正确的吗?
3 - 3 === 0
Run Code Online (Sandbox Code Playgroud)
那么为什么
Infinity - Infinity === NaN
Run Code Online (Sandbox Code Playgroud)
由于typeof Infinity是'number':
the*_*eye 14
我们知道,两个数字之间的差异可以像这样计算
a - b = a + (-b)
Run Code Online (Sandbox Code Playgroud)
JavaScript使用它来查找两个值之间的差异.引用ECMA 5.1规范中的添加运算符到数字部分,
- 运算符在应用于两个数值类型的操作数时执行减法,产生其操作数的差异; 左操作数是minuend,右操作数是subtrahend.给定数字操作数a和b,a-b始终产生与+( - b)相同的结果.
所以,当你这样做的时候
Infinity - Infinity
Run Code Online (Sandbox Code Playgroud)
它被评估为
Infinity + (-Infinity)
Run Code Online (Sandbox Code Playgroud)
在JavaScript中,它们都是不同的对象.引自ECMA 5.1规范的数字类型部分,
还有另外两个特殊值,称为正无穷大和负无穷大.为简洁起见,这些值也分别用符号
+?和引用来表示??.(注意,这两个无限的数值是由程序表达式+Infinity(或简称Infinity)和-Infinity.)生成的.
- 如果是任一操作数
NaN,则结果为NaN.- 两个相反符号的无穷大的总和是
NaN.- 相同符号的两个无穷大的总和是该符号的无穷大.
- ...
这就是结果的原因NaN.
对于任何数字x,我们应该拥有x + 1 - x == 1,对吗?好,
Infinity + 1 == Infinity
Run Code Online (Sandbox Code Playgroud)
那该怎么Infinity + 1 - Infinity办?是1吗?然后我们有Infinity - Infinity == 1,这似乎很奇怪和任意.
实数中没有无穷大.浮点数有一个无穷大,因为当你做一些事情时,某些数值算法很容易得到结果1 / 0,但是浮点无穷大不能拥有你想要的数字所具有的所有好的属性.特别是,没有合理的数字可以返回Infinity - Infinity,所以我们得到了NaN.