JavaScript втрое больше, чем

Я видел этот синтаксис в другом сообщении qaru.site/info/34761/... и мне было любопытно, что он делает:

var len = this.length >>> 0;

Что означает >>>?

Ответ 1

Это беззнаковый оператор сдвига вправо. Интересно, что это единственный побитовый оператор, который является неподписанным в JavaScript.

Оператор → > сдвигает биты выражения 1 вправо на число бит, указанный в выражении2. Нулевые поля заполняются слева. Цифры, сдвинутые с правой стороны, отбрасываются.

Ответ 2

Игнорируя его предполагаемое значение, это наиболее вероятно, где вы его увидите:


>>> 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 может использоваться для преобразования любой переменной в целое число со знаком.

Ответ 3

Этот оператор является логическим сдвигом вправо. Здесь число сдвигается на 0 бит. Смещение нулевых бит математически не должно иметь эффекта.

Но здесь он используется для преобразования значения в 32-битное целое без знака.

Ответ 4

>>> - бит-мудрый оператор, нулевой нулевой сдвиг.

Я думаю, что единственный эффект >>> 0 на положительное число - округлить до ближайшего целого числа, так же как Math.floor(). Я не понимаю, почему это необходимо в вашем примере, поскольку в целом свойство .length (например, Array) уже было бы целым числом.

Я также видел немного более короткое ~~, используемое таким же образом: ~~9.5 == 9; // true.