为什么(无穷大| 0)=== 0?

pim*_*vdb 23 javascript bit-manipulation bitwise-operators infinity bitwise-or

我正在摆弄JavaScript中的按位运算符,我发现有一件事值得注意.

按位或运算符返回1作为输出比特,如果两个输入比特中的一个是1.所以x | 0总是返回x,因为| 0没有效果:

  • ( 1 | 0 ) === 1
  • ( 0 | 0 ) === 0

但是,当我计算时Infinity | 0,我得到了0.这在我看来是令人惊讶的,因为通过上面的应该得到Infinity.毕竟,( x | 0 ) === x.

我无法在ECMAscript规范中找到明确定义的位置,因此我想知道究竟是什么意思( Infinity | 0 ) === 0.也许Infinity是存储在内存中的方式?如果是这样,怎么仍然可以做一个| 0操作导致它返回0而不| 0应该做任何事情?

SLa*_*aks 52

按位运算符仅适用于整数.
Infinity是一个浮点值,而不是整数.

规范在执行操作之前,所有按位操作的操作数都转换为整数(使用ToInt32操作).

ToInt32操作说:

如果number为NaN,则+ 0,-0,+∞或-∞返回+0.