我在摆弄JavaScript中的按位运算符,有一件事我觉得非凡。为什么(Infinity | 0)=== 0?
如果两个输入位之一是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
不应该做任何事情?
你怎么计算'(infinity | 0)'?无限......是无限的,它不能通过它的定义来计算......:| – Albireo
@Albireo - 因为计算机必须以某种方式表示无穷大,并且它只有有限的几个位来完成它。 – Dylan
这真的很有趣,因为当你在if-else语句中使用它时,'Infinity'似乎是一个真值,就像人们所期望的那样。我只是证实了这一点:http://jsfiddle.net/LWBVd/。也许它与'Infinity'的内部表示有关。 – FishBasketGordo