JavaScript中 num >>> 0 发生了什么

在手写filter()中出现了len = O.length >>> 0,其中O为一个数组,那么这个>>>到底进行了什么运算,我们通过本文来看看。
首先看下MDN对于>>>无符号右移的定义

该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被丢弃,左侧用0填充。因为符号位变成了 0,所以结果总是非负的。(译注:即便右移 0 个比特,结果也是非负的。)

首先位运算都是32位的,当一个数进行无符号位移的时候,会舍弃掉正负号以及小数点后面的数字

1.2 >>> 0  // 1
-2.3 >>> 0 // 4294967294 
9 >> 0 // 9
-9 >>> 0 // 4294967287
-9.2 >>> 0 // 4294967287


如果不能转换成数字直接返回0,如果是浮点数,就是舍弃小数点,并且返回整数位,如果是负数,以-9.2 >>> 0,为例,可以看出-9和-9.2的结果都一样,首先舍弃小数点后的数字,得到的结果是4294967287。
所以num >>> 0,无符号移动0位可以做到以下几点:

  1. 如果num不能转换为Number,那就为0
  2. 如果为非整数,先转换为整数

你可能感兴趣的:(JavaScript中 num >>> 0 发生了什么)