運算子優先順序和關聯性決定處理運算子時所依照的順序。對熟悉算術的人而言,編譯器會在加法 (
+
) 運算子之前優先處理乘法 (
*
) 運算子是理所當然的,但編譯器仍需要優先處理哪些運算子的明確指示。這類指示統稱為「運算子優先順序」。ActionScript 定義了預設的運算子優先順序,您可使用括號 (
()
) 運算子來變更順序。例如,下列程式碼會改變上一個範例中的預設優先順序,以強迫編譯器先處理加法運算子,再處理乘法運算子:
var sumNumber:uint = (2 + 3) * 4; // uint == 20
您可能會遇到兩個或更多具有相同優先順序的運算子出現在同一運算式的情形。在這種情況下,編譯器會使用「關聯性」的規則來決定優先處理的運算子。除了指定運算子以外,所有的二元運算子都是「左關聯」,這表示會在右邊運算子之前優先處理左邊的運算子。指定運算子和條件 (
?:
) 運算子是「右關聯」,這表示會在左邊運算子之前優先處理右邊的運算子。
以小於 (
<
) 和大於 (
>
) 運算子為例,它們有著相同的優先順序。如果兩個運算子都使用於相同的運算式,則會先處理左邊的運算子,因為兩個運算子都屬於左關聯性。這表示下列兩個陳述式會產生相同的輸出:
trace(3 > 2 < 1); // false
trace((3 > 2) < 1); // false
大於運算子會先行處理而產生
true
的值,因為運算元 3 大於運算元 2;然後
true
值會傳遞給小於運算子,同時附上運算元 1。下列程式碼代表這種中間狀態:
trace((true) < 1);
小於運算子會將
true
值轉換為數值 1,再將該數值與第二個運算元 1 做比較,最後傳回
false
(值 不小於 1)。
trace(1 < 1); // false
您可以用括號運算子,改變預設的左關聯性。將運算子及其運算元括在括號之間,便可以指示編譯器先處理小於運算子。下列範例會使用前一個範例中相同的成員,並使用括號運算子產生不同的輸出:
trace(3 > (2 < 1)); // true
小於運算子會優行處理,其會產生
false
的值,因為運算元 2 不小於運算元 1。
false
值接著將連同運算元 3 一併傳遞給大於運算子。下列程式碼代表這種中間狀態:
trace(3 > (false));
大於運算子會將
false
值轉換為數值 0,再將該數值與另一個運算元 3 做比較,以傳回
true
(值 3 大於 0)。
trace(3 > 0); // true
下表列出可在 ActionScript 3.0 中用來遞減優先順序的運算子。表中的每一行都包含具有相同優先順序的運算子。每一行運算子的優先順序都高於表中位於其下方的運算子。
群組
|
運算子
|
主要
|
[] {x:y} () f(x) new x.y x[y] <></> @ :: ..
|
後置
|
x++ x--
|
一元
|
++x --x + - ~ ! delete typeof void
|
乘法
|
* / %
|
加法
|
+ -
|
位元位移
|
<< >> >>>
|
關係
|
< > <= >= as in instanceof is
|
相等
|
== != === !==
|
位元 AND
|
&
|
位元 XOR
|
^
|
位元 OR
|
|
|
邏輯 AND
|
&&
|
邏輯 OR
|
||
|
條件
|
?:
|
指定
|
= *= /= %= += -= <<= >>= >>>= &= ^= |=
|
逗號
|
,
|