I saw this syntax on another S开发者_运维知识库tackOverflow post and was curious as to what it does:
var len = this.length >>> 0;
What does >>>
imply?
Ignoring its intended meaning, this is most likely where you'll see it used:
>>> 0
is unique in that it is the only operator that will convert any type to a positive integer:
"string" >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3] >>> 0 == 0
Math.PI >>> 0 == 3
In your example, var len = this.length >>> 0
, this is a way of getting an integer length to use to iterate over this
, whatever type this.length
may be.
Similarly, ~~x
can be used to convert any variable into a signed integer.
That's an unsigned right shift operator. Interestingly, it is the only bitwise operator that is unsigned in JavaScript.
The >>> operator shifts the bits of expression1 right by the number of bits specified in expression2. Zeroes are filled in from the left. Digits shifted off the right are discarded.
That operator is a logical right shift. Here the number is shifted 0 bits. A shift of zero bits mathemetically should have no effect.
But here it is used to convert the value to an unsigned 32 bit integer.
>>>
is a bit-wise operator, zero-fill right shift.
I think the only effect of >>> 0
on a positive number is to round down to the nearest integer, same as Math.floor()
. I don't see why this would be necessary in your example, as generally a .length
property (e.g. of an Array
) would be an integer already.
I've also seen the slightly shorter ~~
used in the same way: ~~9.5 == 9; // true
.
精彩评论