Javascript 无限-无限=NaN?

Javascript 无限-无限=NaN?,javascript,math,Javascript,Math,任何减去自身的数字都应该是0,对吗 3 - 3 === 0 那为什么 Infinity - Infinity === NaN 因为无限的类型是正确的。无限不是一个数字。对于任何数字x,我们应该有x+1-x==1,对吗?那么 Infinity + 1 == Infinity 那么Infinity+1-Infinity应该是什么呢?是不是1?然后我们有了无限-无限==1,这看起来很奇怪,很随意 实数中没有无穷大。浮点中有一个无穷大,因为当你做像1/0这样的事情时,一些数值算法可以很方便地得到一

任何减去自身的数字都应该是
0
,对吗

3 - 3 === 0
那为什么

Infinity - Infinity === NaN

因为无限的类型是正确的。无限不是一个数字。

对于任何数字
x
,我们应该有
x+1-x==1
,对吗?那么

Infinity + 1 == Infinity
那么
Infinity+1-Infinity
应该是什么呢?是不是
1
?然后我们有了
无限-无限==1
,这看起来很奇怪,很随意


实数中没有无穷大。浮点中有一个无穷大,因为当你做像
1/0
这样的事情时,一些数值算法可以很方便地得到一个结果,但是浮点无穷大不能拥有你想要的数字的所有好的属性。特别是,
Infinity-Infinity
没有合理的返回数,因此我们得到
NaN
特殊的数值
Infinity
封装了一个概念

这是为了比较。根据定义,你不能用它做任何算术运算

假定密码过期值。如果选中“永不过期”复选框,则可以将内部值设置为
无限
。任何比较
actualDate
都将计算为
true
(当然,当
actualDate
无穷大时除外)


这比将“no
expiryDate
”状态定义为任意值要好得多,例如
0
-1
null
未定义
,您必须维护并记住该值在应用程序中的概念含义,在发生日期比较的每一行中引入一个新的潜在错误。

正如我们所知,两个数字之间的差异可以这样计算

a - b = a + (-b)
JavaScript使用它来查找两个值之间的差异。引用

-运算符应用于两个数字类型的操作数时执行减法运算,产生其操作数的差;左操作数是小数点,右操作数是减数。给定数值操作数a和b,总是a–b产生与a+(–b)相同的结果

所以,当你这么做的时候

Infinity - Infinity
评估为:

Infinity + (-Infinity)
在JavaScript中,它们都是不同的对象。引用

还有另外两个特殊值,称为正无穷大负无穷大。为简洁起见,这些值也通过符号
+∞
−∞,分别为。(请注意,这两个无限数值是由程序表达式
+无穷
(或简称
无穷
)和
-无穷
生成的)

再次引用

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

这就是为什么结果是
NaN

无穷大不是一个数字。这是一个想法,这是一个概念。花8分钟左右从我最喜欢的YouTube频道(NumberFile)了解什么是无限:
无穷大
不是一个特定的数字。您假设所有无穷大都相等。但是有些人比其他人更平等。@Jus12
0^0
被定义为
1
@SazzadHissainKhan
Math.pow(0,0)==1
@SazzadHissainKhan。形式上它是“不确定”的,但它不存在于浮点空间中,可以表示多个实值的值既不是无限的也不是NaN的。出于所有实际目的,
1
是普遍接受的替代方案,适用于所有现实世界的应用程序
typeof Infinity
实际上是
number
@Xero:根据Javascript,
0.1+0.2!=0.3
@user2357112不,这是IEEE 754浮点数表示法的必然结果,而不是“根据JavaScript”。@Jordan
Infinity
是一个数字。这不是一个可以用来计算的数字。@Tomalak我现在觉得自己很傻。我应该说NaN是真的,是因为你所说的。@Xero不仅仅是Javascript。所有使用本机浮点的东西。无穷大不是数字。x+1-x==1仅对数字有效,对无穷大无效。