编辑:由于Polyfill示例已更新,因此本问题已过时。我将保留这个问题以供参考。阅读正确答案中关于位移运算符的有用信息。
问题:
在 Mozilla Array.prototype.indexOf 页面的 Polyfill 示例中,第 7 行他们有这样的注释:
var length = this.length >>> 0; // Hack to convert object.length to a UInt32
但是Mozilla上的位移运算符规范清楚地说明,该运算符返回与左操作数相同类型的值:
那么长度(length)不应该接收标准的64位浮点值吗?或者有人能指出这个hack从哪里开始吗?位移运算符将其操作数转换为32位整数,并返回与左操作数相同类型的结果。
num
转换为无符号 32 位整数,代码为var uint32 = num >>> 0
。 - jpillora