Я видел этот синтаксис в другом сообщении StackOverflow, и мне было любопытно, что он делает:
var len = this.length >>> 0;
Что >>>значит?
Я видел этот синтаксис в другом сообщении StackOverflow, и мне было любопытно, что он делает:
var len = this.length >>> 0;
Что >>>значит?
>>>всегда устанавливает нулевой бит знака, даже если вы выполняете сдвиг на нулевые биты.
>>>оператор: stackoverflow.com/questions/3081987/…
var length = list.length >>> 0; (тот же вариант использования, что и ваш)
Ответы:
Это беззнаковый оператор сдвига вправо . Интересно, что это единственный побитовый оператор , который без знака в JavaScript.
Оператор >>> сдвигает биты выражения expression1 вправо на количество битов, указанное в expression2. Слева заполняются нули. Сдвинутые вправо цифры отбрасываются.
Игнорируя его предполагаемое значение, скорее всего, вы увидите его использование:
>>> 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свойство (например, an Array) уже будет целым числом.
Я также видел несколько короче , ~~используется таким же образом: ~~9.5 == 9; // true.
Math.abs()для отрицательных чисел.
>>> 0отрицательное число, оно преобразует его в комплимент 2, а затем сделает сдвиг вправо. Следовательно -14 >>> 0 == 1073741820. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )
parseInt?