TL; DR
t.length >>> 0;
in realtà cerca di ottenere un 32 bit numero intero senza segno valida dal t.length
. Per quello che sappiamo, t.length
potrebbe essere di qualsiasi tipo (un oggetto, un array, una stringa, ecc.). >>> 0
restituisce il valore inalterato se è già un numero senza segno valido a 32 bit. Ad esempio,
console.log({} >>> 0);
// 0
console.log([] >>> 0);
// 0
console.log("Google" >>> 0);
// 0
Normalmente, questo bit trucco è utilizzato per evitare un controllo dei tipi if
blocco, come questo
var len = 0;
if (typeof data === 'number') {
len = data;
}
Potremmo ancora per convertire len
in un numero intero, se si tratta di un galleggiante valore in punti.
Spiegazione
>>>
si chiama Zero-fill operatore di spostamento a destra. Oltre ad essere utilizzato come operatore bit a bit, viene utilizzato per ottenere un valore numerico a 32 bit da un oggetto. Il ECMA Script 5.1 Specification for >>>
dice che
- Let Lref essere il risultato della valutazione ShiftExpression.
- Lasciate lval essere GetValue (lref).
- Lasciate rref essere il risultato della valutazione AdditiveExpression.
- Lasciate rval be GetValue (rref).
- Let lnum be ToUint32 (lval).
- Lasciate rnum be ToUint32 (rval).
- Let shiftCount essere il risultato di mascherare tutte ma meno significativi 5 bit di rnum, cioè calcolare rnum & 0x1F.
- Restituisce il risultato dell'esecuzione di uno spostamento a destra con riempimento pari a zero di lnum per shiftCount bit. I bit vuoti vengono riempiti con zero. Il risultato è un numero intero a 32 bit senza segno.
Converte fondamentalmente entrambi gli operandi a 32 bit unsigned integer (Fase 5 e 6) e sposta l'espressione sinistra, mano destra volte espressione lato.
Se guardiamo il definition of ToInt32
,
- Let numero essere il risultato della chiamata ToNumber sull'argomento ingresso.
- Se numero è NaN, +0, -0, + ∞ o -∞, ritorno +0.
- Let posInt essere segno (numero) * piano (abs (numero)).
- Let int32bit essere posInt modulo 2 ; ovvero un valore intero finita k di tipo numero con segno positivo e meno di 2 in grandezza tale che la differenza di matematica posInt e k è matematicamente un multiplo intero di 2 .
- Ritorno int32bit.
Prima l'argomento viene convertito in un numero (se è un non un numero valido poi NaN
sarà restituita da ToNumber
). E il passaggio 4 si assicura di restituire un numero valido nell'intervallo da 0 a 2 .
È un [operatore bit a bit] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators). – Danny