我在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
又不应该有任何影响呢?
(infinity | 0)
?无穷大是...无限的,根据其定义,它不能被计算... :| - AlbireoInfinity
时,它似乎是一个真值,就像您所期望的那样。我刚刚确认了这一点:http://jsfiddle.net/LWBVd/。也许这与`Infinity`的内部表示有关。 - FishBasketGordo0.1
是真值一样,0.1 | 0
是假值。 - pimvdb