dot*_*ack 9 javascript bit-manipulation indexof uint32 operator-keyword
编辑:此问题已过期,因为Polyfill示例已更新.我在这里留下这个问题仅供参考.阅读关于按位移位运算符的有用信息的正确答案.
题:
在Mozilla Array.prototype.indexOf页面的Polyfill示例中的第7行,他们对此进行评论:
var length = this.length >>> 0; // Hack to convert object.length to a UInt32
Run Code Online (Sandbox Code Playgroud)
但Mozilla上的按位移位规范明确指出运算符返回与左操作数相同类型的值:
移位运算符将其操作数转换为32位整数,并返回与左操作数相同类型的结果.
所以不应该长度接收标准的64位浮点值?或者有人能指出黑客入手的地方?
fil*_*mor 11
ECMAScript规范声明该值在http://www.ecma-international.org/ecma-262/5.1/#sec-11.7的步骤5和8中转换为UInt32 :
11.7.3无符号右移运算符(>>>)
对左操作数执行零填充按位右移操作,操作数由右操作数指定.
生产
ShiftExpression : ShiftExpression >>> AdditiveExpression评估如下:
- 让我们
lref评估的结果ShiftExpression.- 我们
lval是GetValue(lref).- 让我们
rref评估的结果AdditiveExpression.- 我们
rval是GetValue(rref).- 我们
lnum是ToUint32(lval).- 我们
rnum是ToUint32(rval).- 让我们
shiftCount掩盖除了最低有效5位之外的所有数据rnum,即计算rnum & 0x1F.- 返回
lnum按shiftCount位执行零填充右移的结果.空位用零填充.结果是无符号的32位整数.
| 归档时间: |
|
| 查看次数: |
7394 次 |
| 最近记录: |