Я возился с побитовыми операторами в 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
ничего не должно делать?