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