Имеет ли t.length ››› 0 что-нибудь в полифиле MDN JS Array?

В MDN Array PolyFils он имеет следующую строку.

var len = t.length >>> 0;

Действительно ли двоичный сдвиг вправо 0 что-нибудь делает, или я могу это убрать?


person David Bradshaw    schedule 22.02.2014    source источник


Ответы (2)


Конечно, что-то делает. Каким бы ни было значение, оно преобразует его в 32-битное число без знака.

Если числовое преобразование невозможно, вы получите 0. Это обрабатывает нечетные случаи, когда .length - какое-то неожиданное значение.

В основном это то, как они реализуют инструкции в спецификации. Как в спецификации для .forEach():

  1. ...

  2. Пусть lenValue будет результатом вызова [[Get]] внутреннего метода O с аргументом "length".

  3. Пусть len будет ToUint32(lenValue).

person cookie monster    schedule 22.02.2014

>>> - это беззнаковый оператор сдвига вправо . Оператор сдвига вправо без знака используется в методе массива, чтобы гарантировать, что свойство length является беззнаковым 32-разрядным целым числом.

Согласно спецификациям:

Каждый объект Array имеет свойство length, значение которого всегда является неотрицательным целым числом меньше 2 32.

person Rahul Tripathi    schedule 22.02.2014