JavaScript Operator Precedence
Precedence describes the order in which operations are performed in an arithmetic expression.
As in traditional mathematics, multiplication is done first:
let x = 100 + 50 * 3;
Try it Yourself »
When using parentheses, operations inside the parentheses are computed first:
let x = (100 + 50) * 3;
Try it Yourself »
When operators have the same precedence (like + and -), they are computed from left to right:
let x = 100 / 50 * 3;
Try it Yourself »
Operator Precedence ValuesExpressions in parentheses are computed before the rest of the expressionFunction are executed before the result is used in the rest of the expression |
|||
Val | Operator | Description | Example |
18 | ( ) | Expression Grouping | (100 + 50) * 3 |
17 | . | Member Of | car.name |
17 | [] | Member Of | car["name"] |
17 | ?. | Optional Chaining ES2020 | x ?. y |
17 | () | Function Call | myFunction() |
17 | new | New with Arguments | new Date("June 5,2022") |
16 | new | New without Arguments | new Date() |
Increment Operators Postfix increments are executed before prefix increments |
|||
15 | ++ | Postfix Increment | i++ |
15 | -- | Postfix Decrement | i-- |
14 | ++ | Prefix Increment | ++i |
14 | -- | Prefix Decrement | --i |
NOT Operators | |||
14 | ! | Logical NOT | !(x==y) |
14 | ~ | Bitwise NOT | ~x |
Unary Operators | |||
14 | + | Unary Plus | +x |
14 | - | Unary Minus | -x |
14 | typeof | Data Type | typeof x |
14 | void | Evaluate Void | void(0) |
14 | delete | Property Delete | delete myCar.color |
Arithmetic Operators Exponentiations are executed before multiplications Multiplications and divisions are executed before additions and subtractions |
|||
13 | ** | Exponentiation ES2016 | 10 ** 2 |
12 | * | Multiplication | 10 * 5 |
12 | / | Division | 10 / 5 |
12 | % | Division Remainder | 10 % 5 |
11 | + | Addition | 10 + 5 |
11 | - | Subtraction | 10 - 5 |
11 | + | Concatenation | "John" + "Doe" |
Shift Operators | |||
10 | << | Shift Left | x << 2 |
10 | >> | Shift Right (signed) | x >> 2 |
10 | >>> | Shift Right (unsigned) | x >>> 2 |
Relational Operators | |||
9 | in | Property in Object | "PI" in Math |
9 | instanceof | Instance of Object | x instanceof Array |
Comparison Operators | |||
9 | < | Less than | x < y |
9 | <= | Less than or equal | x <= y |
9 | > | Greater than | x > y |
9 | >= | Greater than or equal | x >= Array |
8 | == | Equal | x == y |
8 | === | Strict equal | x === y |
8 | != | Unequal | x != y |
8 | !== | Strict unequal | x !== y |
Bitwise Operators | |||
7 | & | Bitwise AND | x & y |
6 | ^ | Bitwise XOR | x ^ y |
5 | | | Bitwise OR | x | y |
Logical Operators | |||
4 | && | Logical AND | x && y |
3 | || | Logical OR | x || y |
3 | ?? | Nullish Coalescing ES2020 | x ?? y |
Conditional (ternary) Operator | |||
2 | ? : | Condition | ? "yes" : "no" |
Assignment Operators Assignments are executed after other operations |
|||
2 | = | Simple Assignment | x = y |
2 | += | Addition Assignment | x += y |
2 | -= | Subtraction Assignment | x -= y |
2 | *= | Multiplication Assignment | x *= y |
2 | **= | Exponentiation Assignment | x **= y |
2 | /= | Division Assignment | x /= y |
2 | %= | Remainder Assignment | x %= y |
2 | <<= | Left Shift Assignment | x <<= y |
2 | >>= | Right Shift Assignment | x >>= y |
2 | >>>= | Unsigned Right Shift | x >>>= y |
2 | &= | Bitwise AND Assignment | x &= y |
2 | |= | Bitwise OR Assignment | x |= y |
2 | ^= | Bitwise XOR Assignment | x ^= y |
2 | &&= | Logical AND Assignment | x &= y |
2 | ||= | Logical OR Assignment | x ||= y |
2 | : | Colon Assignment | x : 5 |
2 | => | Arrow | x => y |
2 | yield | Pause / Resume | yield x |
2 | yield* | Delegate | yield* x |
2 | ... | Spread | ...x |
1 | , | Comma | x , y |