Pregunta JavaScript triple mayor que


Vi esta sintaxis en otro Publicación de StackOverflow y tenía curiosidad sobre lo que hace:

var len = this.length >>> 0;

Que hace >>> ¿implicar?


74
2017-10-10 21:08


origen


Respuestas:


Eso es un operador de cambio a la derecha sin firmar. Curiosamente, es el único operador bit a bit es decir no firmado en JavaScript

El operador >>> desplaza los bits de expresión1 justo por el número de   bits especificados en expression2. Zeroes se completan desde la izquierda.   Los dígitos desplazados de la derecha se descartan.


45
2017-10-10 21:10



Ignorando su significado intencionado, es muy probable que lo veas usar:


>>> 0 es único ya que es el único operador que convertirá cualquier tipo a un entero positivo:

"string"         >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3]        >>> 0 == 0
Math.PI          >>> 0 == 3

En tu ejemplo, var len = this.length >>> 0, esta es una forma de obtener una longitud entera para usar para iterar this, sea cual sea el tipo this.length tal vez.


Similar, ~~x se puede usar para convertir cualquier variable en un entero con signo.


94
2017-10-10 21:32



Ese operador es un cambio lógico correcto. Aquí el número se desplaza 0 bits. Un cambio de cero bits matemáticamente no debería tener ningún efecto.

Pero aquí se usa para convertir el valor a un entero de 32 bits sin signo.


7
2017-10-10 21:14



>>> es un operador bit-wise, cambio de cero a la derecha.

Creo que el único efecto de >>> 0 en un número positivo es redondear al entero más cercano, lo mismo que Math.floor(). No veo por qué esto sería necesario en su ejemplo, ya que generalmente .length propiedad (por ejemplo, de Array) sería un número entero ya.

También he visto el ligeramente más corto ~~ utilizado de la misma manera: ~~9.5 == 9; // true.


3
2017-10-10 21:10