Rangfolge und Assoziativität der Operatoren bestimmen die Reihenfolge, in der die Operatoren verarbeitet werden. Obwohl es für Personen mit arithmetischen Kenntnissen selbstverständlich erscheinen mag, dass der Compiler den Multiplikationsoperator (*) vor dem Additionsoperator (+) ausführt, braucht der Compiler konkrete Anweisungen dafür, in welcher Reihenfolge Operatoren verarbeitet werden sollen. Diese Anweisungen werden zusammenfassend als Operatorrangfolge bezeichnet. In ActionScript gilt eine Standardrangfolge für Operatoren, die Sie jedoch mithilfe von runden Klammern (()) ändern können. Beispielsweise wird mit dem folgenden Code die Standardrangfolge aus dem vorangegangenen Beispiel geändert, um den Compiler zu zwingen, den Additionsoperator vor dem Multiplikationsoperator auszuführen:
var sumNumber:uint = (2 + 3) * 4; // uint == 20
In manchen Fällen können sich zwei oder mehr Operatoren mit derselben Rangfolge im gleichen Ausdruck befinden. In diesen Fällen ermittelt der Compiler anhand der Regeln der Assoziativität, welcher Operator zuerst verarbeitet wird. Für alle binären Operatoren, mit Ausnahme der Zuweisungsoperatoren, gilt die Linksassoziativität, d. h. die Operatoren auf der linken Seite werden vor den Operatoren auf der rechten Seite verarbeitet. Für die Zuweisungsoperatoren und den Bedingungsoperator (?:) gilt die Rechtsassoziativität, sodass die Operatoren auf der rechten Seite vor den Operatoren auf der linken Seite verarbeitet werden.
Der Kleiner als-Operator (<) und der Größer als-Operator (>) haben beispielsweise dieselbe Rangfolge. Sind beide Operatoren im gleichen Ausdruck enthalten, wird der linke Operator zuerst verarbeitet, da für beide Operatoren die Linksassoziativität gilt. Die beiden folgenden Anweisungen generieren somit dieselbe Ausgabe:
trace(3 > 2 < 1); // false
trace((3 > 2) < 1); // false
Der Größer als-Operator wird zuerst verarbeitet. Als Ergebnis entsteht der Wert true, da der Operand 3 größer ist als der Operand 2. Dann wird der Wert true mit dem Operanden 1 an den Kleiner als-Operator übergeben. Dieser Zwischenzustand ist im folgenden Code dargestellt:
trace((true) < 1);
Der Kleiner als-Operator wandelt den Wert true in den numerischen Wert 1 um und vergleicht diesen numerischen Wert mit dem zweiten Operanden 1. Es wird der Wert false zurückgegeben, da der Wert 1 nicht kleiner ist als 1.
trace(1 < 1); // false
Sie können die standardmäßige Linksassoziativität mit dem Klammernoperator ändern. Durch Einschließen des Operators und seiner Operanden in runden Klammern können Sie den Compiler anweisen, zuerst den Kleiner als-Operator zu verarbeiten. Im folgenden Beispielcode wird der Klammernoperator eingesetzt, um bei Verwendung der Zahlen aus dem vorangegangenen Beispiel eine andere Ausgabe zu erzeugen:
trace(3 > (2 < 1)); // true
Der Kleiner als-Operator wird zuerst verarbeitet. Als Ergebnis entsteht der Wert false, da der Operand 2 nicht kleiner ist als der Operand 1. Dann wird der Wert false mit dem Operanden 3 an den Größer als-Operator übergeben. Dieser Zwischenzustand ist im folgenden Code dargestellt:
trace(3 > (false));
Der Größer als-Operator wandelt den Wert false in den numerischen Wert 0 um und vergleicht diesen numerischen Wert mit dem zweiten Operanden 3. Es wird der Wert true zurückgegeben, da der Wert 3 größer ist als 0.
trace(3 > 0); // true
In der folgenden Tabelle sind die Operatoren für ActionScript 3.0 in absteigender Rangfolge aufgeführt. Jede Tabellenzeile enthält Operatoren der gleichen Rangfolge. Jede Operatorenzeile hat einen höheren Rang als die Zeile, die darunter folgt.
Gruppe
|
Operatoren
|
Primär
|
[] {x:y} () f(x) new x.y x[y] <></> @ :: ..
|
Suffix
|
x++ x--
|
Unär
|
++x --x + - ~ ! delete typeof void
|
Multiplikativ
|
* / %
|
Additiv
|
+ -
|
Bitweise Verschiebung
|
<< >> >>>
|
Relational
|
< > <= >= as in instanceof is
|
Gleichheit
|
== != === !==
|
Bitweises AND
|
&
|
Bitweises XOR
|
^
|
Bitweises OR
|
|
|
Logisches AND
|
&&
|
Logisches OR
|
||
|
Bedingung
|
?:
|
Zuweisung
|
= *= /= %= += -= <<= >>= >>>= &= ^= |=
|
Komma
|
,
|