可能重复:
1. What good does zero-fill bit-shifting by 0 do? (a >>> 0)
2. JavaScript triple greater than
我正在挖掘一些MooTools代码,并注意到在每个数组方法中都使用了这个代码段:
var length = this.length >>> 0;
这样做有什么好处?在我看来,它不像是3247823748372 >>> 0 === 828472596
和3247823748373 >>> 0 === 828472597
这样的最长篇幅(因此,两者都高1,如果是maxLength则不会更好地做{ {1}}?)。
答案 0 :(得分:3)
这似乎是确保长度为非负(32位)整数的最安全方式。
另一个例子,说明JavaScript缺少适当的标准函数,这次是将未知类型保存转换为32位无符号整数。
答案 1 :(得分:1)
>>>
是按位"zero-fill right shift" operator。
JavaScript数字可以表示整数和浮点数。有时你只想要一个整数。表示小于2 ^ 32的数字的任何正数JavaScript数将向下舍入(截断,如Math.floor
中)到最接近的整数。数字≥2^ 32变为0.小于0的数字将变为正值(由于二进制补码表示的魔力)。
然而,this.length
可能总是小于2 ^ 32的整数......所以我无法解释为什么代码会这样做。结果应与this.length
相同。