this.length >>> 0
>>>num
其中,>>>num,是无符号右移操作符,>>>3表示无符号右移三位,无符号则在二进制码前面的空缺位补0。
>>num
对于>>num,是有符号右移操作符。对于正数,右移num位后在前面的空缺位补0,对于负数,右移num位后在前面补1。
对于无符号右移操作符>>>,主要可以用来:
- 所有非数值转换成0
- 所有大于等于 0 等数取整数部分
(可以让程序提高鲁棒性,待深入理解…)
接下来看一些使用的例子:
'string' >>> 0 //0
null >>> 0 //0
undefined >>> 0 //0
void(0) >>> 0 //0
function a (){}; a >>> 0 //0
[] >>> 0 //0
var a = {}; a >>> 0 //0
123123 >>> 0 //123123
45.2 >>> 0 //45
0 >>> 0 //0
-0 >>> 0 //0
-1 >>> 0 //4294967295
-1212 >>> 0 //4294966084
回到this.length>>>0本身,对于.length的未定义情况,等同于默认取0操作。即对于任何非数字本身或者异常情况,取0。
这么写确实比 var len = this.length || 0; (parseInt?)要好很多,在遇到意外的 this 时,它不会返回 { }、[ ] 等意外的值。(IE 6+ 支持)
参考:
知乎参考