연산자 우선 순위와 연산 순서에 따라 연산자 처리 순서가 결정됩니다. 산술에 익숙한 독자에게는 컴파일러에서 더하기(+) 연산자보다 곱하기(*) 연산자를 먼저 처리하는 것이 당연해 보이겠지만 컴파일러에게는 어떤 연산자를 먼저 처리할지에 대한 명시적인 지시 사항이 필요합니다. 이러한 지시 사항을 전체적으로 연산자 우선 순위라고 합니다. ActionScript에 정의된 기본 연산자 우선 순위는 괄호(()) 연산자를 사용하여 변경할 수 있습니다. 예를 들어 다음 코드는 컴파일러에서 곱하기 연산자보다 더하기 연산자를 먼저 처리하도록 이전 예제의 기본 우선 순위를 변경합니다.
var sumNumber:uint = (2 + 3) * 4; // uint == 20
우선 순위가 동일한 둘 이상의 연산자가 동일한 표현식에 나타나는 경우가 발생할 수도 있습니다. 이 경우 컴파일러는 연산 순서 규칙을 사용하여 먼저 처리할 연산자를 결정합니다. 대입 연산자를 제외한 모든 이진 연산자는 왼쪽 연관이므로 왼쪽에 있는 연산자가 오른쪽에 있는 연산자보다 먼저 처리됩니다. 대입 연산자와 조건(?:) 연산자는 오른쪽 연관이므로 오른쪽에 있는 연산자가 왼쪽에 있는 연산자보다 먼저 처리됩니다.
예를 들어 보다 작음(<) 연산자와 보다 큼(>) 연산자의 경우 우선 순위가 동일합니다. 두 연산자는 왼쪽 연관이므로 동일한 표현식에 사용될 경우 왼쪽에 있는 연산자가 먼저 처리됩니다. 즉, 다음 두 명령문의 결과는 동일합니다.
trace(3 > 2 < 1); // false
trace((3 > 2) < 1); // false
보다 큼 연산자가 먼저 처리되며 피연산자 3이 피연산자 2보다 크기 때문에 true를 반환합니다. 그런 다음 true 값이 피연산자 1과 함께 보다 작음 연산자로 전달됩니다. 다음 코드는 이 중간 상태를 나타냅니다.
trace((true) < 1);
보다 작음 연산자는 true 값을 숫자 값 1로 변환하고 두 번째 피연산자 1과 비교한 후 값 1이 1보다 작지 않으므로 false 값을 반환합니다.
trace(1 < 1); // false
괄호 연산자를 사용하면 기본적으로 적용되는 왼쪽 연산 순서를 변경할 수 있습니다. 연산자와 피연산자를 괄호로 묶어 컴파일러에서 보다 작음 연산자를 먼저 처리하도록 지시할 수 있습니다. 다음 예제에서는 괄호 연산자를 사용하여 이전 예제에서와 동일한 숫자로 다른 결과를 생성합니다.
trace(3 > (2 < 1)); // true
보다 작음 연산자가 먼저 처리되며 피연산자 2가 피연산자 1보다 크기 때문에 false 값을 반환합니다. 그런 다음 false 값이 피연산자 3과 함께 보다 큼 연산자로 전달됩니다. 다음 코드는 이 중간 상태를 나타냅니다.
trace(3 > (false));
보다 큼 연산자는 false 값을 숫자 값 0으로 변환하고 다른 피연산자 3과 비교한 후 값 3이 0보다 크므로 true 값을 반환합니다.
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
|
||
|
조건
|
?:
|
대입
|
= *= /= %= += -= <<= >>= >>>= &= ^= |=
|
쉼표
|
,
|