TL; DR
t.length >>> 0;
rzeczywiście próbuje uzyskać poprawną 32 bitową liczbę całkowitą bez znaku od t.length
. Co wiemy, może być dowolny typ (obiekt, tablica, łańcuch itp.). >>> 0
zwraca niezmienioną wartość, jeśli jest już prawidłowym 32-bitowym numerem bez znaku. Na przykład,
console.log({} >>> 0);
// 0
console.log([] >>> 0);
// 0
console.log("Google" >>> 0);
// 0
Normalnie, to bitowe trik stosowany jest w celu uniknięcia typu sprawdzanie if
bloku, jak to
var len = 0;
if (typeof data === 'number') {
len = data;
}
Możemy nadal trzeba konwertować len
do liczby całkowitej, jeżeli jest to pływający Wartość punktu.
Wyjaśnienie
>>>
nazywa Zero wypełnić właściwą operatorem przesunięcia. Oprócz tego, że jest używany jako operator bitowy, służy do uzyskania 32-bitowej wartości liczbowej z obiektu. ECMA Script 5.1 Specification for >>>
mówi, że
- Niech lref być wynikiem oceny ShiftExpression.
- Niech lval be GetValue (lref).
- Niech rref będzie wynikiem oceny AdditiveExpression.
- Niech rval be GetValue (rref).
- Niech lnum będzie ToUint32 (lval).
- Niech rnum będzie ToUint32 (rval).
- Niech shiftCount być wynikiem maskowania wszystkich, ale najmniej znaczących 5 bitów rnum, czyli obliczyć rnum & 0x1F.
- Powoduje zwrócenie wyniku przeprowadzania zerowego napełniania prawej zmiany lnum przez shiftCount bitów. Wolne bity są wypełniane zerami. Wynikiem jest 32-bitowa liczba całkowita bez znaku.
Zasadniczo przetwarza oba argumenty do 32 bitów liczba całkowita bez znaku (krok 5 i 6), przesuwa ekspresji lewa, prawa ręka razy ekspresji bocznych.
Jeśli spojrzymy na definition of ToInt32
,
- Niech liczba być wynikiem nazywając ToNumber na argumencie wejściowym.
- Jeśli numer to NaN, +0, -0, + ∞ lub -∞, return +0.
- Niech posInt być znak (liczba) * podłoga (abs (liczba)).
- Niech int32bit być posInt modulo 2 ; to jest wartość całkowita skończony k typu Number ze znakiem dodatnim, a mniej niż 2 wielkości w taki sposób, że matematyczny różnica posInt i k jest matematycznie całkowitą wielokrotnością 2 .
- Powrót int32bit.
Pierwszy argument zostaje przekształcony do szeregu (jeśli to nie jest prawidłowy numer następnie NaN
zostanie zwrócona ToNumber
). Krok 4 zapewnia, że zwrócisz poprawną liczbę z zakresu od 0 do 2 .
To jest [operator bitowy] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators). – Danny