JavaScript triple greater than

Javascript

Javascript 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJey BalachandranView Question on Stackoverflow
Solution 1 - JavascriptEricView Answer on Stackoverflow
Solution 2 - JavascriptJoeView Answer on Stackoverflow
Solution 3 - JavascriptMark ByersView Answer on Stackoverflow
Solution 4 - JavascriptnrabinowitzView Answer on Stackoverflow