2013-06-20 8 views
2

Я знаю, что это глупо, но в любом случае я натолкнулся на этот код здесь, в SO.Что означает `` `` синтаксис в Javascript?

var total = 0; 
for (var i = 0; i < someArray.length; i++) { 
    total += someArray[i] << 0; 
} 

Это получает сумму значений массива. Но я не понимаю последнюю строку.

total += someArray[i] << 0; 
       //-----^^--here 

Что такое <<? Я что-то пропустил. и да!! почему <<.

+1

См. Этот ответ - http://stackoverflow.com/a/1828469/1586880 – lifetimes

+1

Побитовая сдвиг влево: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators – Ian

+0

Вы можете использовать Google – NicoSantangelo

ответ

7

Следующий вопрос будет "почему < < 0"?

Всеbitwise/bitshift operators в JavaScript вызывают [ToInt32] по обоим аргументам.

Таким образом, x << 0 (как в данном случае), x | 0 и ~~x иметь эффект принуждающего значение в целое число в пределах [0, 2^32).

Сравните это с +x, который просто принуждает x к числу.

+0

Еще один список:' ~~ x', i.е. [double bitwise NOT] (http://james.padolsey.com/javascript/double-bitwise-not/). Также обратите внимание, что в отличие от 'Math.floor' эти побитовые трюки всегда округляются * к нулю *. –

+0

@MattiasBuelens Спасибо за хорошее дополнение. – user2246674

+0

yup !! спасибо (за ссылки тоже) .. :) – bipen

5

<< и >> являются Bitshift операции, принимая целое число и смещение все биты влево (<<) или вправо (>>) на 1 бит. Если за ним следует другое число, сдвиг происходит для этого множества бит, поэтому 256 << 4 сдвигает битбаттер на 256, оставшийся на 4 бита (заполняя бит-бит справа справа четырьмя нулями).

Большинство языков программирования поддерживают эти операторы, и у вас обычно нет причин использовать их, если вы не пишете код, который должен действовать на битовые шаблоны для (обычно сверхбыстрых) целых операций.

Как хороший причуд в JavaScript, если вы применяете побитовые операции к числу, он получает принудительное целое число, поэтому сдвиг на 0 бит или выполнение операции с 0, ... | 0 превратит «число» в 32-битное целое число.

+0

. Следующий вопрос будет «почему» << 0' » – zerkms

1

В вашем примере левый сдвиг bitwise operator используется для принудительного преобразования значения в 32-разрядное целое. На странице MDN, которую я только что связал:

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

Обычно цифры в JavaScript - это плавающие данные с двойной точностью.