我在擺弄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