JavaScript triplo maggiore di


88

Ho visto questa sintassi su un altro post StackOverflow ed ero curioso di sapere cosa fa:

var len = this.length >>> 0;

Cosa >>>implica?


1
Questo è un operatore di turno destro, ma perché dovresti cambiare di zero? È una specie di modo economico di fare parseInt?
Rocket Hazmat

5
>>>imposta sempre il bit del segno su zero, anche se si sposta di zero bit.
John Flatness

4
Controllare questa risposta circa il motivo per cui si usano in questo caso l' >>>operatore: stackoverflow.com/questions/3081987/...
Christian C. Salvadó

1
Staffa angolare tripla JavaScript
wprl

Ho visto quella sintassi in developer.mozilla.org/en/docs/Web/JavaScript/Reference/… var length = list.length >>> 0; (stesso caso d'uso del tuo)
Mars Robertson

Risposte:



107

Ignorando il suo significato inteso, questo è molto probabilmente dove lo vedrai usato:


>>> 0 è unico in quanto è l'unico operatore che convertirà qualsiasi tipo in 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 >>> 0questo è un modo per ottenere una lunghezza intera da utilizzare per iterare this, qualunque sia il tipo this.length.


Allo stesso modo, ~~xpuò essere utilizzato per convertire qualsiasi variabile in un intero con segno.


puoi spiegare come iterare usando >>>?

1
@ K48 Non credo che intendesse ripetere , penso che volesse dire che questa lunghezza costringe la lunghezza a diventare un numero. (Altrimenti, sono ugualmente confuso.) Ma ecco un'ottima risposta che chiarisce di più: stackoverflow.com/questions/1822350/…
Mike Williamson,

8

Quell'operatore è uno spostamento logico a destra. Qui il numero è spostato di 0 bit. Uno spostamento di zero bit matematicamente non dovrebbe avere alcun effetto.

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


3

>>>è un operatore bit-saggio, spostamento a destra di riempimento zero .

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

Ho visto anche il leggermente più corta ~~utilizzata nello stesso modo: ~~9.5 == 9; // true.


Dubito che sia lo stesso di Math.abs()quando viene utilizzato per i numeri negativi.
Al Kepp

6
Se lo fai >>> 0su un numero negativo, lo converte in un complimento di 2, quindi esegue lo spostamento a destra. Quindi -14 >>> 0 == 1073741820. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )
Rocket Hazmat

@ AlKepp - sì, ho visto l'errore e l'ho risolto - avrei dovuto testarlo prima, ma questa era chiaramente una domanda rapida :).
nrabinowitz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.