JavaScript的三倍大于

我在另一个StackOverflow文章中看到了这个语法,并对它的function感到好奇:

var len = this.length >>> 0;

>>>意味着什么?

这是一个无符号的右移运算符 。 有趣的是,它是在JavaScript中未签名的唯一按位运算符 。

>>>运算符将expression式1的位右移expression式2中指定的位数。 零点从左侧填充。 右移的数字被丢弃。

忽略它的意图,这是最有可能的地方你会看到它的使用:


>>> 0是唯一的,它是将任何types转换为正整数的唯一操作符:

 "string" >>> 0 == 0 (function() { }) >>> 0 == 0 [1, 2, 3] >>> 0 == 0 Math.PI >>> 0 == 3 

在你的例子中, var len = this.length >>> 0 ,这是一种获取整数长度的方法来迭代this ,无论this.lengthtypes是什么types。


同样的, ~~x可以用来把任何variables转换成有符号的整数。

这个操作符是一个合理的右移。 这里的数字是移位0位。 数位上的零位移动不应该有效果。

但在这里它被用来将值转换为一个无符号的32位整数。

>>>是一个按位运算符, 零填充右移 。

我认为>>> 0对正数的唯一影响是舍入到最接近的整数,与Math.floor()相同。 我不明白为什么在你的例子中这是必要的,因为通常一个.length属性(例如一个Array )是一个整数。

我也看到稍微短一些的~~用相同的方式: ~~9.5 == 9; // true ~~9.5 == 9; // true