2011-10-10 42 views
72

vi esta sintaxis en otro StackOverflow post y era curioso en cuanto a lo que hace:JavaScript triplicar mayor que

var len = this.length >>> 0;

¿Qué >>> implica?

+1

Es un operador de desplazamiento a la derecha, pero ¿por qué cambiaría a la derecha por cero? ¿Es eso una forma barata de hacer 'parseInt'? –

+3

'>>>' siempre establece el bit de signo en cero, incluso si cambia por cero bits. –

+4

Compruebe esta respuesta sobre * why * utilizan en este caso el operador '>>>': http://stackoverflow.com/questions/3081987/what-good-does-zero-fill-bit-shifting-by-0 -do-a-0/3082073 # 3082073 – CMS

Respuesta

44

Eso es unsigned right shift operator. Curiosamente, es el único bitwise operator que es sin firma en JavaScript.

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

3

>>> es un operador bit a bit, zero-fill right shift.

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

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

+0

Dudo que sea igual que' Math.abs() 'cuando se usa para números negativos. –

+6

Si hace '>>> 0' en un número negativo, lo convierte en un cumplido de 2 y luego realiza el desplazamiento correcto. Por lo tanto '-14 >>> 0 == 1073741820'.(http://msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx) –

+0

@AlKepp - sí, vi el error y lo solucioné - debería haber probado primero, pero esto fue claramente una pregunta rápida :) – nrabinowitz

6

Ese operador es un cambio lógico a la derecha. 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 en un entero de 32 bits sin signo.

90

Haciendo caso omiso de su significado previsto, esto es más probable donde se verá que utiliza:


>>> 0 es único, ya que es el único operador que convertirá cualquier tipo a un número 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 manera de conseguir una longitud de número entero a utilizar para iterar sobre this, independientemente del tipo this.length sea.


mismo modo, ~~x se puede utilizar para convertir cualquier variable en un entero con signo.

+0

¿Puedes explicar cómo iterar usando '>>>'? – K48

+1

@ K48 No creo que quiso decir * iterar *, creo que quiso decir que esto obliga a la longitud a convertirse en un número. (De lo contrario, estoy igualmente confundido). Pero aquí hay una gran respuesta que aclara más: https://stackoverflow.com/questions/1822350/what-is-the-javascript-operator-and-how-do-you-use- eso –

Cuestiones relacionadas