这条线在做什么?arr.length >>> 0

mit*_*221 5 javascript operators

这个是来做什么的:

arr.length >>> 0
Run Code Online (Sandbox Code Playgroud)

我为什么要使用它?

Ry-*_*Ry- 8

这是未签名的右移操作员.在这种情况下(与其一起使用时0),它确保它arr.length是一个整数,或者更确切地说,计算arr.length为严格的无符号32位整数值.(这意味着它永远NaN不会消极,并且永远不会有小数部分.)

例子:

'1'       >>> 0: 1
1         >>> 0: 1
''        >>> 0: 0
undefined >>> 0: 0
null      >>> 0: 0
1.0???01  >>> 0: 1
Run Code Online (Sandbox Code Playgroud)

相比于:

Number('1')      : 1
Number(1)        : 1
Number('')       : 0
Number(undefined): NaN
Number(null)     : 0
Number(1.0???01) : 1.0???01
Run Code Online (Sandbox Code Playgroud)

只是确保正确使用正确的长度.


小智 5

确保这.length是一个32位整数.

在大多数实现中,数组索引限制在32位范围内(至少在使用Array.prototype方法时,以及魔术行为.length).

  • 你错过了......我为什么要用呢?可以考虑的唯一情况是if*length*可能被设置为非整数值.但是在符合ECMA-262的实现中[不能发生](http://es5.github.com/#x15.4.5.1).长度**总是**非负整数.所以答案是:**从不**. (2认同)