2011-10-10 11 views
72

ho visto questa sintassi su un altro StackOverflow post ed era curioso di sapere ciò che fa:JavaScript triplicare maggiore di

var len = this.length >>> 0;

Cosa >>> implica?

+1

Questo è un operatore di spostamento a destra, ma perché dovresti spostare a zero? È una specie di modo economico di fare 'parseInt'? –

+3

'>>>' imposta sempre il bit del segno su zero, anche se si cambia per zero bit. –

+4

Controlla questa risposta su * perché * essi usano in questo caso l'operatore '>>>': http://stackoverflow.com/questions/3081987/what-good-does-zero-fill-bit-shifting-by-0 -do-a-0/3082073 # 3082073 – CMS

risposta

44

Questo è un unsigned right shift operator. È interessante notare che è l'unico bitwise operator che è senza firma in JavaScript.

L'operatore >>> sposta i bit di expression1 a destra del numero di bit specificato in expression2. Gli zeri sono compilati da sinistra. Le cifre spostate da destra vengono scartate.

3

>>> è un operatore bit-saggio, zero-fill right shift.

Penso che l'unico effetto di >>> 0 su un numero positivo sia arrotondare al numero intero più vicino, uguale a Math.floor(). Non vedo perché questo sarebbe necessario nel tuo esempio, poiché generalmente una proprietà .length (ad esempio uno Array) sarebbe già un numero intero.

Ho anche visto lo ~~ leggermente più corto utilizzato allo stesso modo: ~~9.5 == 9; // true.

+0

Dubito che sia lo stesso di 'Math.abs()' se usato per i numeri negativi. –

+6

Se si esegue '>>> 0' su un numero negativo, lo converte in complimento di 2, quindi esegue lo spostamento corretto. Pertanto '-14 >>> 0 == 1073741820'.(http://msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx) –

+0

@AlKepp - sì, ho visto l'errore e l'ho risolto - avrei dovuto provare prima, ma questo era chiaramente una domanda rapida :). – nrabinowitz

6

Questo operatore è un giusto spostamento logico. Qui il numero è spostato a 0 bit. Uno spostamento di zero bit matematicamente non dovrebbe avere alcun effetto.

Ma qui viene utilizzato per convertire il valore in un numero intero a 32 bit senza segno.

90

Ignorando le finalità del documento, questo è più probabile in cui lo vedrai utilizzato:


>>> 0 è unico in quanto è l'unico operatore in grado di convertire qualsiasi tipo di un numero intero positivo:

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

Nel tuo esempio, var len = this.length >>> 0, questo è un modo di ottenere un valore intero da utilizzare per iterare this, qualunque sia il tipo this.length sia.


Analogamente, ~~x può essere utilizzato per convertire qualsiasi variabile in un numero intero con segno.

+0

puoi spiegare come iterare usando '>>>'? – K48

+1

@ K48 Non penso che intendesse * iterare *, penso che intendesse dire che questa lunghezza delle forze è diventata un numero. (Altrimenti, sono ugualmente confuso.) Ma ecco una grande risposta che chiarisce di più: https://stackoverflow.com/questions/1822350/what-is-the-javascript-operator-and-how-do-you-use- esso –