在检查 lodash 代码时,我想出了一个我很好奇的问题。
// slice.js
function slice(array, start, end) {
let length = array == null ? 0 : array.length
if (!length) {
return []
}
start = start == null ? 0 : start
end = end === undefined ? length : end
if (start < 0) {
start = -start > length ? 0 : (length + start)
}
end = end > length ? length : end
if (end < 0) {
end += length
}
length = start > end ? 0 : ((end - start) >>> 0)
start >>>= 0
let index = -1
const result = new Array(length)
while (++index < length) {
result[index] = array[index + start]
}
return result
}
export default slice
((end - start) >>> 0)
<块引用>
据我所知,位运算符会移动二进制数的位置,但我很好奇它为什么会移动 0 次。
>>>=
>>>=
这个运算符我还是第一次看到。
有人知道这是什么意思吗?答案 0 :(得分:5)
>>>
称为无符号右移(或零填充右移)。您可能知道左移/右移。
基本上它将指定的位数向右移动。你可以找到它here
所以 >>>=
基本上是右移分配。
a >>>= b
相当于:
a = a >>> b
答案 1 :(得分:1)
如您所说,无符号右移运算符 (a >>> b
) 确实将变量 a
的位移动了 b
位。
它总是返回一个正整数,因此 a >>> 0
将用于确保输入不是说、负数或字符串,或者不是正整数。
a >>>= b
类似于a += b
,即对b
进行右移a
,然后将输出赋值给a
,类似于{{ 1}} 将 a += b
添加到 b
,然后将结果分配给 a
。所以 a
等价于 a >>>= b
就像 a = a >>> b
等价于 a += b
。