Я видел этот синтаксис в другом сообщении StackOverflow, и мне было любопытно, что он делает:
var len = this.length >>> 0;
Что >>>
значит?
javascript
Джей Балачандран
источник
источник
parseInt
?>>>
всегда устанавливает нулевой бит знака, даже если вы выполняете сдвиг на нулевые биты.>>>
оператор: stackoverflow.com/questions/3081987/…var length = list.length >>> 0;
(тот же вариант использования, что и ваш)Ответы:
Это беззнаковый оператор сдвига вправо . Интересно, что это единственный побитовый оператор , который без знака в JavaScript.
источник
Игнорируя его предполагаемое значение, скорее всего, вы увидите его использование:
>>> 0
уникален тем, что это единственный оператор, который преобразует любой тип в положительное целое число:"string" >>> 0 == 0 (function() { }) >>> 0 == 0 [1, 2, 3] >>> 0 == 0 Math.PI >>> 0 == 3
В вашем примере
var len = this.length >>> 0
это способ получить целочисленную длину для использования для перебораthis
, независимо от типаthis.length
.Точно так же
~~x
может использоваться для преобразования любой переменной в целое число со знаком.источник
>>>
?Этот оператор представляет собой логический сдвиг вправо. Здесь число сдвинуто на 0 бит. Математически сдвиг нулевых битов не должен иметь никакого эффекта.
Но здесь он используется для преобразования значения в 32-битное целое число без знака.
источник
>>>
- побитовый оператор, сдвиг вправо с заполнением нулями .Я думаю, что единственный эффект от
>>> 0
положительного числа - округление до ближайшего целого числа, как иMath.floor()
. Я не понимаю, почему это необходимо в вашем примере, так как обычно.length
свойство (например, anArray
) уже будет целым числом.Я также видел несколько короче ,
~~
используется таким же образом:~~9.5 == 9; // true
.источник
Math.abs()
для отрицательных чисел.>>> 0
отрицательное число, оно преобразует его в комплимент 2, а затем сделает сдвиг вправо. Следовательно-14 >>> 0 == 1073741820
. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )