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