无限 - 无穷大= NaN?

7 javascript math

任何数字减去它本身应该是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.)生成的.

再次引用ECMA 5.1规范中的将附加运算符应用于数字部分

  • 如果是任一操作数NaN,则结果为NaN.
  • 两个相反符号的无穷大的总和是NaN.
  • 相同符号的两个无穷大的总和是该符号的无穷大.
  • ...

这就是结果的原因NaN.


use*_*ica 7

对于任何数字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.