Я побачив цей синтаксис в іншому дописі StackOverflow і мені було цікаво, що він робить:
var len = this.length >>> 0;
Що >>>означає?
Я побачив цей синтаксис в іншому дописі StackOverflow і мені було цікаво, що він робить:
var len = this.length >>> 0;
Що >>>означає?
>>>завжди встановлює знаковий біт на нуль, навіть якщо ви зсуваєте на нуль бітів.
>>>оператор: stackoverflow.com/questions/3081987 / ...
var length = list.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властивість (наприклад, 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?