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

时间:2011-07-11 12:29:01

标签: javascript bit-manipulation bitwise-operators infinity bitwise-or

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

如果两个输入位之一为1,则bitwise or operator1作为输出位返回。因此,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不应该做任何事情仍然如何?

2 个答案:

答案 0 :(得分:52)

按位运算符仅适用于整数 Infinity是浮点值,不是整数。

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

ToInt32 operation说:

  

如果数字是NaN,则+ 0,-0,+∞或-∞返回+0。

答案 1 :(得分:2)

进行数学和其他需要NaNInfinity整数的操作通常是个坏主意。您如何设置/清除 Infinity 中的位?

实际上,逐位操作仅针对整数定义 - 并且整数没有NaNInfinity