Our volunteers haven't translated this article into عربي yet. Join us and help get the job done!
Operator precedence determines the order in which operators are evaluated. Operators with higher precedence are evaluated first.
A common example:
3 + 4 * 5 // returns 23
The multiplication operator ("*
") has higher precedence than the addition operator ("+
") and thus will be evaluated first.
Associativity
Associativity determines the order in which operators of the same precedence are processed. For example, consider an expression:
a OP b OP c
Left-associativity (left-to-right) means that it is processed as (a OP b) OP c
, while right-associativity (right-to-left) means it is interpreted as a OP (b OP c)
. Assignment operators are right-associative, so you can write:
a = b = 5;
with the expected result that a
and b
get the value 5. This is because the assignment operator returns the value that it assigned. First, b
is set to 5. Then the a
is also set to 5, the return value of b = 5
, aka right operand of the assignment.
Table
The following table is ordered from highest (20) to lowest (0) precedence.
Precedence | Operator type | Associativity | Individual operators |
---|---|---|---|
20 | Grouping |
n/a | ( … ) |
19 | Member Access |
left-to-right | … . … |
Computed Member Access |
left-to-right | … [ … ] |
|
new (with argument list) |
n/a | new … ( … ) |
|
18 | Function Call | left-to-right | … ( … ) |
new (without argument list) |
right-to-left | new … |
|
17 | Postfix Increment |
n/a | … ++ |
Postfix Decrement |
n/a | … -- |
|
16 | Logical NOT | right-to-left | ! … |
Bitwise NOT | right-to-left | ~ … |
|
Unary Plus | right-to-left | + … |
|
Unary Negation | right-to-left | - … |
|
Prefix Increment | right-to-left | ++ … |
|
Prefix Decrement | right-to-left | -- … |
|
typeof | right-to-left | typeof … |
|
void | right-to-left | void … |
|
delete | right-to-left | delete … |
|
15 | Exponentiation | right-to-left | … ** … |
14 | Multiplication | left-to-right | … * … |
Division | left-to-right | … / … |
|
Remainder | left-to-right | … % … |
|
13 | Addition | left-to-right | … + … |
Subtraction | left-to-right | … - … |
|
12 | Bitwise Left Shift | left-to-right | … << … |
Bitwise Right Shift | left-to-right | … >> … |
|
Bitwise Unsigned Right Shift | left-to-right | … >>> … |
|
11 | Less Than | left-to-right | … < … |
Less Than Or Equal | left-to-right | … <= … |
|
Greater Than | left-to-right | … > … |
|
Greater Than Or Equal | left-to-right | … >= … |
|
in | left-to-right | … in … |
|
instanceof | left-to-right | … instanceof … |
|
10 | Equality | left-to-right | … == … |
Inequality | left-to-right | … != … |
|
Strict Equality | left-to-right | … === … |
|
Strict Inequality | left-to-right | … !== … |
|
9 | Bitwise AND | left-to-right | … & … |
8 | Bitwise XOR | left-to-right | … ^ … |
7 | Bitwise OR | left-to-right | … | … |
6 | Logical AND | left-to-right | … && … |
5 | Logical OR | left-to-right | … || … |
4 | Conditional | right-to-left | … ? … : … |
3 | Assignment | right-to-left | … = … |
… += … |
|||
… -= … |
|||
… **= … |
|||
… *= … |
|||
… /= … |
|||
… %= … |
|||
… <<= … |
|||
… >>= … |
|||
… >>>= … |
|||
… &= … |
|||
… ^= … |
|||
… |= … |
|||
2 | yield | right-to-left | yield … |
yield* | right-to-left | yield* … |
|
1 | Spread | n/a | ... … |
0 | Comma / Sequence | left-to-right | … , … |