JavaScript triple greater than
JavascriptJavascript Problem Overview
I saw this syntax on another StackOverflow post and was curious as to what it does:
var len = this.length >>> 0;
What does >>>
imply?
Javascript Solutions
Solution 1 - Javascript
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.
Solution 2 - Javascript
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.
Solution 3 - Javascript
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.
Solution 4 - Javascript
>>>
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
.