>>>= 是什么意思?

时间:2021-01-08 07:01:49

标签: javascript arrays lodash

在检查 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
  1. 具体来说,我很好奇为什么这部分代码存在。
((end - start) >>> 0)
<块引用>

据我所知,位运算符会移动二进制数的位置,但我很好奇它为什么会移动 0 次。

  1. >>>=
  • 还有 >>>= 这个运算符我还是第一次看到。 有人知道这是什么意思吗?

2 个答案:

答案 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