Widziałem tę składnię w innym poście StackOverflow i byłem ciekawy, co robi:
var len = this.length >>> 0;
Co to znaczy >>>?
Widziałem tę składnię w innym poście StackOverflow i byłem ciekawy, co robi:
var len = this.length >>> 0;
Co to znaczy >>>?
>>>zawsze ustawia bit znaku na zero, nawet jeśli przesuniesz o bity zerowe.
>>>operatora: stackoverflow.com/questions/3081987/…
var length = list.length >>> 0; (ten sam przypadek użycia, co twój)
Odpowiedzi:
To niepodpisany prawy operator zmiany . Co ciekawe, jest to jedyny bitowe operatora , który jest unsigned w JavaScript.
Operator >>> przesuwa bity wyrażenia1 w prawo o liczbę bitów określoną w wyrażeniu2. Zera są wypełniane od lewej strony. Cyfry przesunięte w prawo są odrzucane.
Ignorując jego zamierzone znaczenie, najprawdopodobniej zobaczysz, że jest używany:
>>> 0 jest unikalny, ponieważ jest jedynym operatorem, który konwertuje dowolny typ na dodatnią liczbę całkowitą:
"string" >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3] >>> 0 == 0
Math.PI >>> 0 == 3
W twoim przykładzie var len = this.length >>> 0jest to sposób na uzyskanie długości całkowitej, która będzie używana do iteracji this, niezależnie od typu this.length.
Podobnie ~~xmoże służyć do konwersji dowolnej zmiennej na liczbę całkowitą ze znakiem.
Ten operator jest logicznym przesunięciem w prawo. Tutaj liczba jest przesunięta o 0 bitów. Matematycznie przesunięcie o zero bitów nie powinno mieć żadnego efektu.
Ale tutaj jest używany do konwersji wartości na 32-bitową liczbę całkowitą bez znaku.
>>>jest operatorem bitowym, przesunięciem w prawo z wypełnieniem zerowym .
Myślę, że jedynym skutkiem dla >>> 0liczby dodatniej jest zaokrąglenie w dół do najbliższej liczby całkowitej, tak samo jak Math.floor(). Nie rozumiem, dlaczego miałoby to być konieczne w twoim przykładzie, ponieważ generalnie .lengthwłaściwość (np. Array) Byłaby już liczbą całkowitą.
Ja również widziałem nieco krótsza ~~stosowane w taki sam sposób ~~9.5 == 9; // true.
Math.abs()przypadku liczb ujemnych.
>>> 0na liczbie ujemnej, zamieni ją na komplement 2, a następnie dokona prawego przesunięcia. Dlatego -14 >>> 0 == 1073741820. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )
parseInt?