運算子優先序
運算子優先序(Operator precedence)決定了運算子彼此之間被語法解析的方式,優先序較高的運算子會成為優先序較低運算子的運算元(operands)。
嘗試一下
相依性(Associativity)
當優先序相同時,使用相依性決定運算方向。範例如下:
a OP b OP c
左相依性 (Left-associativity) ,表示處理順序為從左至右 (a OP b) OP c
,反之,右相依性(right-associativity) 表示處理順序為從右至左 a OP (b OP c)
。賦值運算符 (Assignment operators) 為右相依性,範例如下:
js
a = b = 5;
a
和 b
的預期結果為 5,因為賦值運算符 (Assignment operator) 為右相依性,因此從右至左返回值。一開始 b
被設定為 5,接著 a
也被設定為 5。
表格(Table)
下方表格列出運算子的相依性,從高 (19) 到低 (1)。
優先性 Precedence |
運算子名稱 Operator type |
相依性 Associativity |
運算子 Individual operators |
---|---|---|---|
19 | Grouping | 無 | ( … ) |
18 | Member Access | 從左至右 | … . … |
Computed Member Access | 從左至右 | … [ … ] |
|
new (with argument list) |
無 | new … ( … ) |
|
呼叫函式 | 從左至右 |
… ( … )
|
|
可選串連(Optional chaining) | 從左至右 | ?. |
|
17 |
new (without argument list)
|
從右至左 | new … |
16 | 字尾遞增 | 無 | … ++ |
字尾遞減 | … -- |
||
15 | Logical NOT | 從右至左 | ! … |
Bitwise NOT | ~ … |
||
Unary Plus | + … |
||
Unary Negation | - … |
||
字首遞增 | ++ … |
||
字首遞減 | -- … |
||
typeof |
typeof … |
||
void |
void … |
||
delete |
delete … |
||
await |
await … |
||
14 | Exponentiation | 從右至左 | … ** … |
13 | Multiplication | 從左至右 | … * … |
Division | … / … |
||
Remainder | … % … |
||
12 | Addition | 從左至右 | … + … |
Subtraction | … - … |
||
11 | Bitwise Left Shift | 從左至右 | … << … |
Bitwise Right Shift | … >> … |
||
Bitwise Unsigned Right Shift | … >>> … |
||
10 | Less Than | 從左至右 | … < … |
Less Than Or Equal | … <= … |
||
Greater Than | … > … |
||
Greater Than Or Equal | … >= … |
||
in |
… in … |
||
instanceof |
… instanceof … |
||
9 | Equality | 從左至右 | … == … |
Inequality | … != … |
||
Strict Equality | … === … |
||
Strict Inequality | … !== … |
||
8 | Bitwise AND | 從左至右 | … & … |
7 | Bitwise XOR | 從左至右 | … ^ … |
6 | Bitwise OR | 從左至右 | … | … |
5 | Logical AND | 從左至右 | … && … |
4 | Logical OR | 從左至右 | … || … |
Nullish Coalescing | 從左至右 | … ?? … |
|
3 | 條件運算 | 從右至左 | … ? … : … |
2 | 賦值 | 從右至左 | … = … |
… += … |
|||
… -= … |
|||
… **= … |
|||
… *= … |
|||
… /= … |
|||
… %= … |
|||
… <<= … |
|||
… >>= … |
|||
… >>>= … |
|||
… &= … |
|||
… ^= … |
|||
… |= … |
|||
… &&= … |
|||
… ||= … |
|||
… ??= … |
|||
1 | Comma / Sequence | 從左至右 | … , … |