Я возился с побитовыми операторами в JavaScript, и есть одна вещь, которую я считаю замечательной.
Побитовый оператор or возвращает 1
как выходной бит если один из двух входных битов равен 1
. Так поступает x | 0
всегда возвращает x
, потому что | 0
не действует:
(1 | 0) === 1
(0 | 0) === 0
Однако, когда я вычислил Infinity | 0
, я получил 0
. На мой взгляд, это удивительно, потому что по вышесказанному должно получиться Бесконечность
. В конце концов, (x | 0) === x
.
Я не могу найти, где в спецификации ECMAscript это явно определено, поэтому мне было интересно, что именно означает, что (Infinity | 0 ) === 0
. Возможно ли, что Infinity
хранится в памяти? Если так, то как это может быть, что делает | 0 операция
заставляет его вернуть 0
, тогда как | 0
ничего не должно делать?