Article directory
- If OP1 and OP2 have different precedence (see table below), the operator with the highest precedence is executed first, regardless of associativity.
console.log(3 + 10 * 2);
console.log((3 + 10) * 2);
- Associativity is considered if OP1 and OP2 have the same priority.
- Left associative (left to right) is equivalent to adding parentheses to the left subexpression (a OP b) OP c
- Right associative (right to left) is equivalent to a OP (b OP c)
a = b = 5;
- The table below ranks all operators in order of precedence from highest (19) to lowest (1).
priority |
operator type |
Combination |
operator |
19 |
group |
n/a (not relevant) |
() |
ditto |
member access |
from left to right |
. |
ditto |
Calculated member access |
ditto |
... |
ditto |
function call |
ditto |
fun() |
ditto |
Optional chaining |
ditto |
?. |
ditto |
new (with parameter list) |
n/a |
new |
17 |
new (no argument list) |
from right to left |
new |
16 |
post-increment |
n/a |
++ |
ditto |
post-decrement |
ditto |
-- |
15 |
logical NOT(!) |
from right to left |
! |
ditto |
bitwise NOT (~) |
ditto |
~ |
ditto |
Unary addition (+) |
ditto |
+ |
ditto |
unary subtraction (-) |
ditto |
- |
ditto |
Pre-increment |
ditto |
++ |
ditto |
pre-decrement |
ditto |
-- |
ditto |
typeof |
ditto |
typeof |
ditto |
void |
ditto |
void |
ditto |
delete |
ditto |
delete |
ditto |
await |
ditto |
await |
14 |
power(**) |
from right to left |
** |
13 |
multiplication(*) |
from left to right |
* |
ditto |
division(/) |
ditto |
/ |
ditto |
Surplus(%) |
ditto |
% |
12 |
Addition (+) |
from left to right |
+ |
ditto |
Subtraction (-) |
ditto |
- |
11 |
Bitwise left shift (<<) |
from left to right |
<< |
ditto |
Bitwise right shift (>>) |
ditto |
>> |
ditto |
Unsigned right shift (>>>) |
ditto |
>>> |
10 |
less than (<) |
from left to right |
< |
ditto |
less than or equal to (<=) |
ditto |
<= |
ditto |
greater than (>) |
ditto |
> |
ditto |
greater than or equal to (>=) |
ditto |
>= |
ditto |
in |
ditto |
in |
ditto |
instanceof … |
ditto |
instanceof |
9 |
equal (==) |
from left to right |
== |
ditto |
not equal (!=) |
ditto |
!= |
ditto |
Consistent/strict equality (===) |
ditto |
=== |
ditto |
inconsistent/strictly not equal (!==) |
ditto |
!== |
8 |
bitwise AND (&) |
from left to right |
& |
7 |
Bitwise XOR (^) |
from left to right |
^ |
6 |
bitwise or (|) |
from left to right |
| |
5 |
logical AND (&&) |
from left to right |
&& |
4 |
Logical OR (||) |
from left to right |
|| |
ditto |
Null coalescing (??) |
from left to right |
?? |
3 |
Conditional (ternary) operator |
from right to left |
? … : |
2 |
assignment |
from right to left |
= |
ditto |
ditto |
ditto |
+= |
ditto |
ditto |
ditto |
-= |
ditto |
ditto |
ditto |
**= |
ditto |
ditto |
ditto |
*= |
ditto |
ditto |
ditto |
/= |
ditto |
ditto |
ditto |
%= |
ditto |
ditto |
ditto |
<<= |
ditto |
ditto |
ditto |
>>= |
ditto |
ditto |
ditto |
>>>= |
ditto |
ditto |
ditto |
&= |
ditto |
ditto |
ditto |
^= |
ditto |
ditto |
ditto |
|= |
ditto |
ditto |
ditto |
&&= |
ditto |
ditto |
ditto |
||=. |
ditto |
ditto |
ditto |
??= |
1 |
comma/ sequence |
from left to right |
, |