我正在摆弄JavaScript中的按位运算符,我发现有一件事值得注意。
如果两个输入位之一为1
,则bitwise or operator将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
不应该做任何事情仍然如何?
答案 0 :(得分:52)
按位运算符仅适用于整数
Infinity
是浮点值,不是整数。
规范says,在执行操作之前,所有按位操作的操作数都将转换为整数(使用 ToInt32 操作)。
如果数字是NaN,则+ 0,-0,+∞或-∞返回+0。
答案 1 :(得分:2)
进行数学和其他需要NaN
和Infinity
整数的操作通常是个坏主意。您如何设置/清除 Infinity 中的位?
实际上,逐位操作仅针对整数定义 - 并且整数没有NaN
或Infinity
。