Javascript中的右移位操作符
在MDN上看到很多地方用到 >>>
操作符,很是不理解,通过stackoverflow获得了以下解释
它不仅是将非数字转换为Number,还将他们转换为可用32位无符号Int表达的Number。
Javascript 的Number 是双精度浮点型,而位操作符(<< , >> , & , | , ~)
是就32位整数型定义的。对number进行位操作会将它转换为32位有符号整数。丢失所有分数和超过32位的高位信息。先进行位运算然后转换为Number。
所以进行一个没有任何效果的位元算,比如右移0位 >>0
,可以快速取整并保证它在32位Int范围内。同样的,>>>
操作在它的无符号运算后,将计算结果转换为无符号整数而不是带符号整数。所以它可以用来将负数转换为32位二进制补码版本。使用 >>>0
可以保证你获得0到0xFFFFFFFF之间的整数。
在这个例子中,它更有用,是因为ECMAScript定义的Array键值为32位无符号整数。所以如果你想实现ECMAScript第五版中所说的 array.filter
,你需要这样来保证32位无符号整数。
总结:
1>>>0 === 1
-1>>>0 === 0xFFFFFFFF -1>>0 === -1
1.7>>>0 === 1
0x100000002>>0 === 2
1e21>>>0 === 0xDEA00000 1e21>>0 === -0x21600000
Infinity>>>0 === 0
NaN>>>0 === 0
null>>>0 === 0
'1'>>>0 === 1
'x'>>>0 === 0
Object>>>0 === 0
Written on February 23, 2016