JavaScript triple greater than

I saw this syntax on another StackOverflow post and was curious as to what it does:

var len = this.length >>> 0;

What does >>> imply?

Answers:

Answer

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.

Answer

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.

Answer

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.

Answer

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

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.