運算子優先序

運算子優先序(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;

ab 的預期結果為 5,因為賦值運算符 (Assignment operator) 為右相依性,因此從右至左返回值。一開始 b 被設定為 5,接著 a 也被設定為 5。

表格(Table)

下方表格列出運算子的相依性,從高 (19) 到低 (1)。

優先性
Precedence
運算子名稱
Operator type
相依性
Associativity
運算子
Individual operators
19 Grouping (en-US) ( … )
18 Member Access (en-US) 從左至右 … . …
Computed Member Access (en-US) 從左至右 … [ … ]
new (with argument list) new … ( … )
呼叫函式 從左至右 … ( )
可選串連(Optional chaining) 從左至右 ?.
17 new (without argument list) 從右至左 new …
16 字尾遞增 … ++
字尾遞減 … --
15 Logical NOT (en-US) 從右至左 ! …
Bitwise NOT (en-US) ~ …
Unary Plus + …
Unary Negation - …
字首遞增 ++ …
字首遞減 -- …
typeof typeof …
void (en-US) void …
delete delete …
await await …
14 Exponentiation 從右至左 … ** …
13 Multiplication 從左至右 … * …
Division … / …
Remainder (en-US) … % …
12 Addition 從左至右 … + …
Subtraction … - …
11 Bitwise Left Shift (en-US) 從左至右 … << …
Bitwise Right Shift (en-US) … >> …
Bitwise Unsigned Right Shift (en-US) … >>> …
10 Less Than (en-US) 從左至右 … < …
Less Than Or Equal (en-US) … <= …
Greater Than (en-US) … > …
Greater Than Or Equal (en-US) … >= …
in (en-US) … in …
instanceof (en-US) … instanceof …
9 Equality (en-US) 從左至右 … == …
Inequality (en-US) … != …
Strict Equality (en-US) … === …
Strict Inequality (en-US) … !== …
8 Bitwise AND (en-US) 從左至右 … & …
7 Bitwise XOR (en-US) 從左至右 … ^ …
6 Bitwise OR (en-US) 從左至右 … | …
5 Logical AND (en-US) 從左至右 … && …
4 Logical OR (en-US) 從左至右 … || …
Nullish Coalescing (en-US) 從左至右 … ?? …
3 條件運算 從右至左 … ? … : …
2 賦值 從右至左 … = …
… += …
… -= …
… **= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
… &&= …
… ||= …
… ??= …
1 Comma / Sequence (en-US) 從左至右 … , …