Vi esta sintaxis en otra publicación de StackOverflow y tenía curiosidad por saber qué hace:
var len = this.length >>> 0;
¿Qué >>>
implica?
javascript
Jey Balachandran
fuente
fuente
parseInt
?>>>
siempre establece el bit de signo en cero, incluso si cambia en cero bits.>>>
operador: stackoverflow.com/questions/3081987/…var length = list.length >>> 0;
(mismo caso de uso que el suyo)Respuestas:
Es un operador de turno a la derecha sin firmar . Curiosamente, es el único operador bit a bit que no está firmado en JavaScript.
fuente
Haciendo caso omiso de su significado previsto, es muy probable que lo vea utilizado:
>>> 0
es único en el sentido de que es el único operador que convertirá cualquier tipo en un entero positivo:"string" >>> 0 == 0 (function() { }) >>> 0 == 0 [1, 2, 3] >>> 0 == 0 Math.PI >>> 0 == 3
En su ejemplo,
var len = this.length >>> 0
esta es una forma de obtener una longitud entera para usar para iterarthis
, sea cual sea el tipothis.length
.Del mismo modo,
~~x
se puede utilizar para convertir cualquier variable en un entero con signo.fuente
>>>
?Ese operador es un desplazamiento lógico a la derecha. Aquí el número se desplaza 0 bits. Un desplazamiento de cero bits matemáticamente no debería tener ningún efecto.
Pero aquí se utiliza para convertir el valor en un entero de 32 bits sin signo.
fuente
>>>
es un operador bit a bit, desplazamiento a la derecha de llenado cero .Creo que el único efecto de
>>> 0
sobre un número positivo es redondear hacia abajo al entero más cercano, igual queMath.floor()
. No veo por qué esto sería necesario en su ejemplo, ya que generalmente una.length
propiedad (por ejemplo, de anArray
) ya sería un número entero.También he visto el poco más corto
~~
utilizado de la misma manera:~~9.5 == 9; // true
.fuente
Math.abs()
cuando se usa para números negativos.>>> 0
en un número negativo, lo convierte en el complemento de 2, luego hace el cambio correcto. Por eso-14 >>> 0 == 1073741820
. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )