">>>="是什么意思?"

5

我在查看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. >>>=
  • >>>= 这个运算符是我第一次见到。 有人知道它是什么意思吗?

3
好的,以下是您需要翻译的内容:可能已经在https://dev59.com/RGsz5IYBdhLWcg3wsaEN#7718947中回答了。 - Maurice Lam
它将数字转换为uint32。 - Thomas
3
这个问题的答案是什么?JavaScript 三个大于号或者JavaScript 中这个符号代表什么? - John Kugelman
相关:https://dev59.com/MXI-5IYBdhLWcg3wf4hD - Rod911
2个回答

5

>>> 被称为无符号右移(或零填充右移)。您可能已经了解到左/右位移的概念。 它基本上将指定数量的位向右移动。您可以在这里找到更多信息。

因此,>>>= 基本上是 右移赋值

a >>>= b

等价于:

a = a >>> b

1
无符号右移位运算符(a >>> b)确实会将变量a的位向右移动b位,正如您所说。
它始终返回一个正整数,因此a >>> 0用于确保输入不是负数、字符串或其他不是正整数的值。
a >>>= b类似于a += b,它应用右移ba,然后将输出分配给a,就像a += bb加到a,然后将结果分配给a一样。因此,a >>>= b等同于a = a >>> b,就像a += b等同于a = a + b一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接