quick-lint-js

Find bugs in JavaScript programs.

E0716: unintuitive operator precedence when using & and << or >>

JavaScript's operator precedence can cause confusing situations and bugs when it comes to bitshifting with a bitwise and.

let a_bitwise_variable = another_variable & 0x1 << 0x2

The code above looks like it evaluates another_variable & 0x1 first, but it instead evaluates 0x1 << 0x2 first. If this is intended behavior, it may be easier to read if you write parentheses:

another_variable & (0x1 << 0x2)

Otherwise, to get the order of operations correct, add parentheses around the operands of &:

(another_variable & 0x1) << 0x2

Documentation for other errors