Я видел этот синтаксис в другом сообщении qaru.site/info/34761/... и мне было любопытно, что он делает:
var len = this.length >>> 0;
Что означает >>>
?
Я видел этот синтаксис в другом сообщении qaru.site/info/34761/... и мне было любопытно, что он делает:
var len = this.length >>> 0;
Что означает >>>
?
Это беззнаковый оператор сдвига вправо. Интересно, что это единственный побитовый оператор, который является неподписанным в JavaScript.
Оператор → > сдвигает биты выражения 1 вправо на число бит, указанный в выражении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
может использоваться для преобразования любой переменной в целое число со знаком.
Этот оператор является логическим сдвигом вправо. Здесь число сдвигается на 0 бит. Смещение нулевых бит математически не должно иметь эффекта.
Но здесь он используется для преобразования значения в 32-битное целое без знака.
>>>
- бит-мудрый оператор, нулевой нулевой сдвиг.
Я думаю, что единственный эффект >>> 0
на положительное число - округлить до ближайшего целого числа, так же как Math.floor()
. Я не понимаю, почему это необходимо в вашем примере, поскольку в целом свойство .length
(например, Array
) уже было бы целым числом.
Я также видел немного более короткое ~~
, используемое таким же образом: ~~9.5 == 9; // true
.