В MDN Array PolyFils он имеет следующую строку.
var len = t.length >>> 0;
Действительно ли двоичный сдвиг вправо 0 что-нибудь делает, или я могу это убрать?
В MDN Array PolyFils он имеет следующую строку.
var len = t.length >>> 0;
Действительно ли двоичный сдвиг вправо 0 что-нибудь делает, или я могу это убрать?
Конечно, что-то делает. Каким бы ни было значение, оно преобразует его в 32-битное число без знака.
Если числовое преобразование невозможно, вы получите 0
. Это обрабатывает нечетные случаи, когда .length
- какое-то неожиданное значение.
В основном это то, как они реализуют инструкции в спецификации. Как в спецификации для .forEach()
:
...
Пусть
lenValue
будет результатом вызова[[Get]]
внутреннего методаO
с аргументом"length"
.Пусть
len
будетToUint32(lenValue)
.
>>>
- это беззнаковый оператор сдвига вправо . Оператор сдвига вправо без знака используется в методе массива, чтобы гарантировать, что свойство length является беззнаковым 32-разрядным целым числом.
Согласно спецификациям:
Каждый объект Array имеет свойство length, значение которого всегда является неотрицательным целым числом меньше 2 32.