J'ai vu cette syntaxe sur un autre article de StackOverflow et j'étais curieux de savoir ce qu'elle fait:
var len = this.length >>> 0;
Qu'est-ce que cela >>>
implique?
javascript
Jey Balachandran
la source
la source
parseInt
?>>>
met toujours le bit de signe à zéro, même si vous décalez de zéro bit.>>>
opérateur: stackoverflow.com/questions/3081987/…var length = list.length >>> 0;
(même cas d'utilisation que le vôtre)Réponses:
C'est un opérateur de décalage à droite non signé . Fait intéressant, c'est le seul opérateur au niveau du bit qui n'est pas signé en JavaScript.
la source
Ignorant sa signification prévue, c'est probablement là que vous le verrez utilisé:
>>> 0
est unique en ce sens que c'est le seul opérateur qui convertira n'importe quel type en entier positif:"string" >>> 0 == 0 (function() { }) >>> 0 == 0 [1, 2, 3] >>> 0 == 0 Math.PI >>> 0 == 3
Dans votre exemple,
var len = this.length >>> 0
c'est un moyen d'obtenir une longueur entière à utiliser pour itérerthis
, quel que soit le typethis.length
.De même,
~~x
peut être utilisé pour convertir n'importe quelle variable en un entier signé.la source
>>>
?Cet opérateur est un décalage logique vers la droite. Ici, le nombre est décalé de 0 bits. Un décalage de zéro bit mathématiquement ne devrait avoir aucun effet.
Mais ici, il est utilisé pour convertir la valeur en un entier 32 bits non signé.
la source
>>>
est un opérateur binaire, décalage à droite sans remplissage .Je pense que le seul effet de
>>> 0
sur un nombre positif est d'arrondir à l'entier inférieur le plus proche, commeMath.floor()
. Je ne vois pas pourquoi cela serait nécessaire dans votre exemple, car généralement une.length
propriété (par exemple d'unArray
) serait déjà un entier.J'ai aussi vu la légèrement plus courte
~~
utilisée de la même manière:~~9.5 == 9; // true
.la source
Math.abs()
utilisé pour les nombres négatifs.>>> 0
sur un nombre négatif, il le convertit en compliment de 2, puis effectue le décalage à droite. Par conséquent-14 >>> 0 == 1073741820
. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )