Es ist nicht nur konvertieren Nicht-Zahlen zu Anzahl, es wandelt sich in Zahlen, die als 32-Bit unsigned ints ausgedrückt werden können.
Obwohl JavaScript der Zahlen sind mit doppelter Genauigkeit Schwimmer (*), die Bit-Operatoren (<<
, >>
, &
, |
und ~
) auf 32-Bit-Integer in Bezug auf die Operationen definiert. Bei einer bitweisen Operation wird die Zahl in einen vorzeichenbehafteten 32-Bit-Int konvertiert, wobei Brüche und höhere Stellen als 32 verloren gehen, bevor die Berechnung ausgeführt und dann wieder in Number konvertiert wird.
Eine bitweise Operation ohne tatsächlichen Effekt, wie eine Rechtsverschiebung von 0 Bits >>0
, ist eine schnelle Möglichkeit, eine Zahl zu runden und sicherzustellen, dass sie im 32-Bit-int-Bereich liegt. Darüber hinaus wandelt der dreifache Operator >>>
nach seiner vorzeichenlosen Operation die Ergebnisse seiner Berechnung in Zahl als vorzeichenlose Ganzzahl und nicht in die Ganzzahl mit Vorzeichen der anderen um, so dass er zur Umwandlung von Negativen in 32-Bit-Zwei verwendet werden kann. Ergänzen Sie die Version als große Zahl. Mit >>>0
wird sichergestellt, dass Sie eine Ganzzahl zwischen 0 und 0xFFFFFFFF haben.
In diesem Fall ist dies nützlich, weil ECMAScript Array-Indizes in 32-Bit-Unsigned-Ints definiert. Wenn Sie also versuchen, array.filter
auf eine Weise zu implementieren, die exakt dem entspricht, was der Standard ECMAScript Fifth Edition sagt, würden Sie die Zahl auf 32-Bit unsigned int wie folgt umwandeln.
(In der Realität gibt es wenig praktische Notwendigkeit dafür, wie hoffentlich die Menschen gehen werden nicht array.length
-0.5
Einstellung, -1
, 1e21
oder 'LEMONS'
. Aber das ist JavaScript Autoren wir reden, so dass Sie nie wissen .. .)
Zusammenfassung:
1>>>0 === 1
-1>>>0 === 0xFFFFFFFF -1>>0 === -1
1.7>>>0 === 1
0x100000002>>>0 === 2
1e21>>>0 === 0xDEA00000 1e21>>0 === -0x21600000
Infinity>>>0 === 0
NaN>>>0 === 0
null>>>0 === 0
'1'>>>0 === 1
'x'>>>0 === 0
Object>>>0 === 0
(*: na ja, sie sind definiert als wie Schwimmer verhalten es würde mich nicht überraschen, wenn einige tatsächlich JavaScript-Engine ints verwendet, wenn konnte es aus Leistungsgründen.. Aber das wäre ein Implementierungsdetail y ou würde keinen Vorteil nehmen bekommen.)
@CMS Wahr, dieser Code/diese Frage kommt von diesen; Die Antwort hier ist jedoch spezifischer und wertvoller als die vorherigen. –
Oder es ist ein Fehler oder Mozilla Jungs gehen davon aus. Länge könnte -1 sein. >>> ist ein vorzeichenloser Shift-Operator, so dass var len immer 0 oder größer ist. – user347594
-1 >>> 0 === 4294967295 – jimr