Estoy jugando con operadores bit a bit en JavaScript y hay algo que me parece notable.¿Por qué es (Infinity | 0) === 0?
bitwise or operator devuelve 1
como bit de salida si uno de los dos bits de entrada es 1
. Al hacerlo x | 0
siempre vuelve x
, porque | 0
no tiene ningún efecto:
(1 | 0) === 1
(0 | 0) === 0
Sin embargo, cuando calculé Infinity | 0
, tengo 0
. Esto es sorprendente en mi opinión, porque por el anterior uno debería obtener Infinity
. Después de todo, (x | 0) === x
.
No puedo encontrar el lugar en la especificación de ECMAscript, esto está explícitamente definido, así que me preguntaba qué implica exactamente eso (Infinity | 0) === 0
. ¿Es tal vez la forma en que Infinity
se almacena en la memoria? Si es así, ¿cómo puede ser que haciendo una operación | 0
haga que regrese a 0
mientras que | 0
no debería hacer nada?
¿Cómo se puede calcular '(infinity | 0)'? El infinito es ... infinito, no puede ser calculado por su propia definición ...: | – Albireo
@Albireo - Porque una computadora tiene que representar el infinito de alguna manera, y tiene un número limitado de bits para hacerlo. – Dylan
Esto es realmente interesante, porque 'Infinity' parece ser un valor verdadero cuando lo usa en una instrucción if-else, como uno esperaría. Acabo de confirmar esto: http://jsfiddle.net/LWBVd/. Quizás tiene que ver con la representación interna de 'Infinity'. – FishBasketGordo