Почему (Infinity | 0) === 0?

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

23
задан pimvdb 17 September 2011 в 11:50
поделиться