1
является 0000...0001
2
является 0000...0010
i
вероятно хранит набор флагов, установленных в качестве битов на в междунар.
i & 1
просто проверяет, что последний бит установлен, и i & 2
проверяет, установлен ли один из них. См. the MDN on bitwise operators.
Вы можете хранить около 52 флагов в яваскрипте числа, используя эту систему:
i = 0; // no flag
i |= 4; // sets a flag
i |= 1<<2; // sets the same flag but is more readable
var bool = i & 4; // truish if the flag is set
Так что ваш код делает это:
if i has flag 1 then o.y += k else o.y += -k
if i has flag 2 then o.x += k else o.x += -k
Какая часть это хлопотно? Это 'a? b: c' (тройной оператор)? Или это '&' (побитовое и)? – mwcz
@mwcz: Это [условный оператор] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator). –
@MarcelKorpel Ответ Guffa объясняет это :) – mwcz