JavaScript 大于

我在另一个 StackOverflow 贴子上看到了这种语法,并对它的功能感到好奇:

var len = this.length >>> 0;

>>>意味着什么?

19415 次浏览

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.

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

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.

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.