无符号右移操作符 >>>
>>>
操作符能够将number
和非number
类型转换为无符号32位整型。
js
1 >>> 0 === 1
-1 >>> 0 === 0xFFFFFFFF
1.7 >>> 0 === 1
0x100000002 >>> 0 === 2
1e21 >>> 0 === 0xDEA00000
Infinity >>> 0 === 0
NaN >>> 0 === 0
null >>> 0 === 0
'1' >>> 0 === 1
'x' >>> 0 === 0
Object >>> 0 === 0
JavaScript 中,数字是双精度浮点数,位操作(<<
、>>
、&
、|
、~
)将数字转化为32位整型(带正负的),有时候会出现意想不到的结果,比如:
js
4294967295 >> 0 === -1
4294967295..toString(2) === '11111111111111111111111111111111'
>>>
与右移操作符>>
不同,>>>
返回的结果是无符号32位整型,它永远不会是负数,且数值在32位内。
>>>
可以用于保证位操作之后结果不会变为负数:
js
(4294967295 >> 0) >>> 0 === 4294967295
(2147483647 << 1) >>> 0 === 4294967294
(4294967294 | 2147483647) >>> 0 === 4294967295
JS 中数组索引是无符号32位整型,>>>
可以保证类型无误。
>>>
虽然可以很方便的进行类型转化,但实际开发中,像>>> 0
这样语义不详的操作切勿滥用。