Study/Actionscript 3.02010. 7. 4. 21:46

http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002262.html


align (TextFormat.align property)

public align : String

A string that indicates the alignment of the paragraph. You can apply this property to static and dynamic text. The following list shows possible values for this property:

  • "left"--The paragraph is left-aligned.
  • "center"--The paragraph is centered.
  • "right"--The paragraph is right-aligned.
  • "justify"--The paragraph is justified. (This value was added in Flash Player 8.)

The default value is null, which indicates that the property is undefined.

Availability: ActionScript 1.0; Flash Player 6 - The "justify" value is available beginning with Flash Player 8.

Example

The following example shows the align property being set to justify, which causes the characters on each line to be spread out so that the text looks more evenly spaced horizontally.

var format:TextFormat = new TextFormat();
format.align = "justify";

var txtField:TextField = this.createTextField("txtField", this.getNextHighestDepth(), 100, 100, 300, 100);
txtField.multiline = true;
txtField.wordWrap = true;
txtField.border = true;
txtField.text = "When this text is justified, it will be "
    + "spread out to more cleanly fill the horizontal "
    + "space for each line. This can be considered an "
    + "improvement over regular left-aligned text that "
    + "will simply wrap and do no more.";
txtField.setTextFormat(format);

The MovieClip.getNextHighestDepth() method used in this example requires Flash Player 7 or later. If your SWF file includes a version 2 component, use the version 2 components' DepthManager class instead of the MovieClip.getNextHighestDepth() method.

Posted by chacolina
Study/Actionscript 3.02010. 7. 4. 20:47
http://blog.zupko.info/?p=117



2008-03-11_1039.png

Getting text to be clear is an obvious problem for people when using Papervision, as it pops up on the list in a new thread every week or so. I’ve had this demo for a while now, but between work, writing, and trying to find a life outside my computer, I haven’t taken the the time to post the source or explain how you can easily clear up your text.

View the demo

In this demo, I take a couple parameters into account, to see how they affect text clarity:

  • Smoothing : If the material uses smoothing or not
  • Transparency : If the material is transparent
  • Anti-Aliasing : Normal or Advanced aliasing on the text field.
  • Bitmap Caching : Set the cacheAsBitmap property or not
  • Size : How large the text field (and parent movieclip) is

Taking these things into account, you can see in the demo above what really makes the difference. The most obvious: SIZE. Use bigger textfields! This will get you the clearest text no matter what. The difference is quite obvious between the 100 and 300 pixel textfields. I personally can’t see much change from 300 to 500, but I might be overlooking something. Remember that size is a trade off with papervision: the larger your movieclip, the longer it takes to render. Try to find the perfect balance of size (quality) and speed for your application.

Smoothing makes a significant difference. If you want to clean up your text, turn on smoothing. The sister parameter to smoothing should always be tiled, to prevent any lockups at high angles.

Transparency helps remove artifacts from the textfield. I’m not sure what actually causes the faces to show through with dynamic text, but transparency removes them. For better performance however, setcacheAsBitmap to true – as this will also remove the artifacts, but not add additional overhead during rendering. An interesting observation: these artifacts also disappear if you add any other content to the stage – I imagine things are cached to deal with other display objects. So a possible workaround for both transparency and cacheAsBitmap is to simply add a little invisible clip onto the stage.

Anti-Aliasing seemed to do absolutely nothing. Set it to advanced if you feel like it, but unless I’m blind I don’t see any advantage to having it on.

And thats about it! Hope it helps some of you with your text field woes.

Get the Source


Posted by chacolina
Study/Actionscript 3.02010. 6. 29. 14:57
연산자
 

기호 연산자는 표현식의 값을 결합, 비교, 수정하는 방법을 지정하는 문자입니다.


  산술 연산자
  + addition 숫자 표현식을 추가합니다.
  -- decrement 피연산자에서 1을 뺍니다.
  / division expression1을 expression2로 나눕니다.
  ++ increment 표현식에 1을 더합니다.
  % modulo expression1을 expression2로 나눈 나머지를 계산합니다.
  * multiplication 두 개의 숫자 표현식을 곱합니다.
  - subtraction 부정하거나 빼는 데 사용됩니다.
  산술 복합 대입 연산자
  += addition assignment expression1에 expression1 + expression2의 값을 대입합니다.
  /= division assignment expression1에 expression1 / expression2의 값을 대입합니다.
  %= modulo assignment expression1에 expression1 % expression2의 값을 대입합니다.
  *= multiplication assignment expression1에 expression1 * expression2의 값을 대입합니다.
  -= subtraction assignment expression1에 expression1 - expression2의 값을 대입합니다.
  대입 연산자
  = assignment expression2의 값(오른쪽 피연산자)을 expression1의 변수, 배열 요소 또는 속성에 대입합니다.
  비트 연산자
  & bitwise AND expression1 및 expression2를 32비트 부호 없는 정수로 변환하고 정수 매개 변수의 각 비트에 대해 부울 AND 연산을 수행합니다.
  << bitwise left shift expression1 및 shiftCount를 32비트 정수로 변환하고, expression1의 모든 비트를 shiftCount 변환 결과 정수값으로 지정된 자릿수만큼 왼쪽으로 이동합니다.
  ~ bitwise NOT expression을 32비트 부호 있는 정수로 변환한 다음 비트 1의 보수를 적용합니다.
  | bitwise OR expression1 및 expression2를 32비트 부호 없는 정수로 변환하고, expression1 또는 expression2의 해당 비트가 1인 각 비트 위치에 1을 배치합니다.
  >> bitwise right shift expression 및 shiftCount를 32비트 정수로 변환하고, expression의 모든 비트를 shiftCount 변환 결과로 나온 정수로 지정된 자릿수만큼 오른쪽으로 이동합니다.
  >>> bitwise unsigned right shift 왼쪽 비트에는 항상 0이 채워지므로 원래 표현식의 부호가 유지되지 않는다는 점을 제외하면 비트 오른쪽 시프트(>>) 연산자와 동일합니다.
  ^ bitwise XOR expression1 및 expression2를 32비트 부호 없는 정수로 변환하고, expression1 또는 expression2 중 하나의 해당 비트가 1인 각 비트 위치에 1을 배치합니다.
  비트 복합 대입 연산자
  &= bitwise AND assignment expression1에 expression1 & expression2의 값을 대입합니다.
  <<= bitwise left shift and assignment 비트 왼쪽 시프트(<<=) 연산을 수행하고 그 결과를 expression1에 저장합니다.
  |= bitwise OR assignment expression1에 expression1 | expression2의 값을 대입합니다.
  >>= bitwise right shift and assignment 비트 오른쪽 시프트 연산을 수행하고 그 결과를 expression에 저장합니다.
  >>>= bitwise unsigned right shift and assignment 부호 없는 비트 오른쪽 시프트 연산을 수행하고 그 결과를 expression에 저장합니다.
  ^= bitwise XOR assignment expression1에 expression1 ^ expression2의 값을 대입합니다.
  주석
  /*..*/ block comment delimiter 한 줄 이상의 스크립트 주석을 구분합니다.
  // line comment delimiter 스크립트 주석의 시작을 나타냅니다.
  비교 연산자
  == equality 두 표현식이 동일한지 여부를 테스트합니다.
  > greater than 두 표현식을 비교하여 expression1이 expression2보다 큰지 여부를 확인합니다. 큰 경우 결과는 true입니다.
  >= greater than or equal to 두 표현식을 비교하여 expression1이 expression2(true)보다 크거나 같은지, 아니면 expression1이 expression2(false)보다 작은지를 확인합니다.
  != inequality 항등(==) 연산자의 정반대 상황을 테스트합니다.
  < less than 두 표현식을 비교하여 expression1이 expression2보다 작은지 여부를 확인합니다. 작은 경우 결과는 true입니다.
  <= less than or equal to 두 표현식을 비교하여 expression1이 expression2보다 작거나 같은지를 확인합니다. 작거나 같은 경우 결과는 true입니다.
  === strict equality 두 표현식이 동일한지 테스트합니다. 그러나 자동 데이터 변환은 수행하지 않습니다.
  !== strict inequality 완전 항등(===) 연산자의 정반대 상황을 테스트합니다.
  논리 연산자
  && logical AND false이거나 false로 변환될 수 있으면 expression1을 반환하고, 그렇지 않으면 expression2를 반환합니다.
  &&= logical AND assignment expression1에 expression1 && expression2의 값을 대입합니다.
  ! logical NOT 변수 또는 표현식의 부울 값을 반대로 합니다.
  || logical OR true이거나 true로 변환될 수 있으면 expression1을 반환하고, 그렇지 않으면 expression2를 반환합니다.
  ||= logical OR assignment expression1에 expression1 || expression2의 값을 대입합니다.
  기타
  [] array access a0 등과 같은 지정된 요소를 사용하여 새 배열 또는 다차원 배열을 초기화하거나 배열의 요소에 액세스합니다.
    as 첫 번째 피연산자로 지정된 표현식이 두 번째 피연산자로 지정된 데이터 유형의 멤버인지 평가합니다.
  , comma expression1expression2 등을 평가합니다.
  ?: conditional expression1을 평가하여 expression1의 값이 true이면 결과는 expression2의 값이고, 그렇지 않으면 결과는 expression3의 값입니다.
    delete reference에 지정된 객체 속성을 삭제한 후 속성이 존재하지 않으면 결과가 true이고, 그렇지 않으면 false입니다.
  . dot 클래스 변수 및 메서드에 액세스하고, 객체 속성을 가져오고 설정하며, 가져온 패키지 또는 클래스를 구분합니다.
    in 속성이 특정 객체에 속하는지 여부를 평가합니다.
    instanceof 표현식의 프로토타입 체인에 function에 대한 프로토타입 객체가 포함되어 있는지 여부를 평가합니다.
    is 객체가 특정 데이터 유형, 클래스 또는 인터페이스와 호환되는지 여부를 평가합니다.
  :: name qualifier 속성, 메서드, XML 속성 또는 XML 특성의 네임스페이스를 식별합니다.
    new 클래스 인스턴스를 인스턴스화합니다.
  {} object initializer 지정된 name 및 value 속성 쌍으로 새 객체를 만들거나 초기화합니다.
  () parentheses 하나 이상의 매개 변수에 대해 그룹화 연산을 수행하고, 표현식을 연속적으로 평가하거나, 하나 이상의 매개 변수를 묶은 다음 괄호 앞의 함수에 인수로 전달합니다.
  / RegExp delimiter 문자의 앞/뒤에 사용하면 해당 문자에 리터럴 값이 있으므로 이 문자를 변수, 문자열 또는 다른 ActionScript 요소가 아니라 일반 표현식(RegExp)으로 간주해야 함을 나타냅니다.
  : type 데이터 유형 대입에 사용되는 이 연산자는 변수 유형, 함수 반환 유형 또는 함수 매개 변수 유형을 지정합니다.
    typeof expression을 평가하고 표현식의 데이터 유형을 지정하는 문자열을 반환합니다.
    void 표현식을 평가한 후 그 값을 버리고 undefined를 반환합니다.
  문자열 연산자
  + concatenation 문자열을 연결 또는 결합합니다.
  += concatenation assignment expression1에 expression1 + expression2의 값을 대입합니다.
  " string delimiter 문자의 앞/뒤에 사용하면 해당 문자에 리터럴 값이 있으므로 이 문자를 변수, 숫자 값 또는 다른 ActionScript 요소가 아니라 문자열로 간주해야 함을 나타냅니다.
  XML 연산자
  @ attribute identifier XML 또는 XMLList 객체의 속성을 식별합니다.
  { } braces (XML) XML 또는 XMLList 이니셜라이저에 사용된 표현식을 평가합니다.
  [ ] brackets (XML) XML 또는 XMLList 객체의 속성 또는 특성에 액세스합니다.
  + concatenation (XMLList) XML 또는 XMLList 값을 XMLList 객체로 연결(결합)합니다.
  += concatenation assignment (XMLList) XMLList 객체인 expression1을 expression1 + expression2 값에 대입합니다.
    delete (XML) reference로 지정된 XML 요소 또는 속성을 삭제합니다.
  .. descendant accessor XML 또는 XMLList 객체의 자손 요소로 이동하거나 @ 연산자와 결합된 경우 자손의 일치하는 속성을 찾습니다.
  . dot (XML) XML 또는 XMLList 객체의 자식 요소로 이동하거나 @ 연산자와 결합된 경우 XML 또는 XMLList 객체의 특성을 반환합니다.
  ( ) parentheses (XML) E4X XML 생성의 표현식을 평가합니다.
  < > XML literal tag delimiter XML 리터럴의 XML 태그를 정의합니다.
연산자 정보
+ addition 연산자
구문
expression1 + expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

숫자 표현식을 추가합니다. 두 표현식이 정수인 경우 그 합도 정수이며, 한 표현식 또는 두 표현식이 모두 부동 소수점 숫자인 경우 그 합도 부동 소수점 숫자입니다.

한 표현식이 문자열이면 다른 표현식도 모두 더해지는 대신 문자열로 변환된 후 연결됩니다. 그렇지 않고 한 표현식이 숫자가 아닌 경우에는 Flash® Player가 해당 표현식을 숫자로 변환합니다.

피연산자
expression1:Number — 추가할 값입니다.
expression2:Number — 추가할 값입니다.

결과
Number — 정수 또는 부동 소수점 숫자입니다.

예제 
예제 사용 방법 
이 명령문은 정수 2와 3을 더합니다.
trace(2 + 3); // 5
이 명령문은 부동 소수점 숫자 2.5와 3.25를 더합니다.
trace(2.5 + 3.25); // 5.75
이 예제에서는 한 표현식이 문자열일 때 다른 모든 표현식도 문자열로 변환되어 연결된다는 것을 보여 줍니다.
trace("Number " + 8 + 0); // Number 80
동적 텍스트 필드 및 입력 텍스트 필드와 관련된 변수의 데이터 유형은 String입니다. 다음 예제에서 변수 deposit은 스테이지에 있는 입력 텍스트 필드입니다. 사용자가 예금액을 입력하면 스크립트에서는 depositoldBalance에 추가하려고 시도합니다. 하지만 deposit은 String 유형이므로 스크립트에서는 변수 값을 더하는 대신 서로 연결하여 한 문자열을 구성합니다.
var oldBalance:Number = 1345.23; 
var currentBalance = deposit_txt.text + oldBalance; 
trace(currentBalance); 
예를 들어, 사용자가 deposit 텍스트 필드에 475를 입력한 경우 trace() 문에 의해 4751345.23이 출력 패널에 전달됩니다. 이 문제를 해결하려면 다음과 같이 Number() 함수를 사용하여 문자열을 숫자로 변환해야 합니다.
var oldBalance:Number = 1345.23; 
var currentBalance:Number = Number(deposit_txt.text) + oldBalance;
trace(currentBalance);

참고 사항

+= addition assignment 연산자  
구문
expression1 += expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 + expression2의 값을 대입합니다. 예를 들어, 다음 두 명령문의 결과는 동일합니다.

x += y; 
x = x + y; 
더하기(+) 연산자의 모든 규칙은 더하기 대입(+=) 연산자에 적용됩니다.

피연산자
expression1:Number — 숫자입니다.
expression2:Number — 숫자입니다.

결과
Number — 더하기의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 더하기 대입(+=) 연산자를 산술적으로 사용하는 방법을 보여 줍니다.
var x:Number = 5; 
var y:Number = 10; 
x += y; 
trace(x); // 15 

참고 사항

[] array access 연산자  
구문
myArray = [a0, a1,...aN]
myArray[i] = value 
myObject[propertyName]

Player 버전 :  Flash Player 9

a0 등과 같은 지정된 요소를 사용하여 새 배열 또는 다차원 배열을 초기화하거나 배열의 요소에 액세스합니다. 배열 액세스 연산자를 사용하면 인스턴스, 변수 및 객체 이름을 동적으로 설정하고 가져올 수 있습니다. 또한 객체 속성에 액세스할 수도 있습니다.

구문 1: 배열은 일종의 객체로 해당 속성은 요소라고 하며, 이 요소는 각각 인덱스라는 숫자에 의해 식별됩니다. 배열을 만드는 경우 배열 액세스 연산자([]) 또는 대괄호를 사용하여 요소를 묶습니다. 배열에는 다양한 유형의 요소가 포함될 수 있습니다. 예를 들어, 이름이 employee인 다음 배열에는 세 요소가 포함되어 있습니다. 첫 번째 요소는 숫자이고 두 번째 두 요소는 인용 부호로 묶여 있는 문자열입니다.

var employee:Array = [15, "Barbara", "Jay"]; 
대괄호를 중첩하여 다차원 배열을 시뮬레이션할 수 있습니다. 이때 최대 256개의 수준으로 배열을 중첩할 수 있습니다. 다음 코드에서는 세 요소를 사용하여 ticTacToe라는 배열을 만듭니다. 각 요소는 또한 세 요소가 포함된 하나의 배열입니다.
var ticTacToe:Array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; 
			
/* Select Debug > List Variables in test mode 
to see a list of the array elements.*/ 
구문 2: 직접 액세스할 수 있도록 각 요소의 인덱스를 대괄호([])로 묶습니다. 배열에 새 요소를 추가하고 기존 요소의 값을 변경하거나 가져올 수 있습니다. 다음 예제와 같이 배열의 첫 번째 인덱스는 항상 0입니다.
var my_array:Array = new Array(); 
my_array[0] = 15; 
my_array[1] = "Hello"; 
my_array[2] = true; 
다음과 같이 대괄호를 사용하여 네 번째 요소를 추가할 수 있습니다.
my_array[3] = "George"; 
대괄호를 사용하여 다차원 배열의 요소에 액세스할 수 있습니다. 첫 번째 대괄호 세트는 원본 배열의 요소를 식별하고 두 번째 세트는 중첩된 배열의 요소를 식별합니다. 다음 trace() 문은 두 번째 배열(인덱스 1)의 세 번째 요소(인덱스 2)를 찾습니다.
var ticTacToe:Array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; 
trace(ticTacToe[1][2]); // 6 
구문 3: 배열 액세스 연산자를 사용하여 객체 속성의 값을 동적으로 설정하거나 검색할 수 있습니다.
var obj:Object = new Object();
obj.prop1 = "foo";
trace(obj["prop" + 1]); // foo
obj.prop2 = "bar";
for (j in obj) {
	trace(obj[j]);
} 
/* Output of for loop: 
foo
bar */

피연산자
myArray:Object — 배열의 이름입니다.
a0, a1,...aN:Object — 배열의 요소; 기본 유형 또는 객체 인스턴스입니다(중첩된 배열 포함).
i:Number — 0보다 크거나 같은 정수 인덱스입니다.
myObject:Object — 객체의 이름입니다.
propertyName:String — 객체 속성의 이름을 지정하는 문자열입니다.

결과
Object —

구문 1: 배열에 대한 참조입니다.

구문 2: 배열의 값으로서, 기본 유형 또는 객체 인스턴스입니다(Array 인스턴스 포함).

구문 3: 객체의 속성으로서, 기본 유형 또는 객체 인스턴스입니다(Array 인스턴스 포함).


예제 
예제 사용 방법 
다음 예제에서는 새로운 빈 Array 객체를 만드는 두 가지 방법을 보여 줍니다. 첫 번째 행에서는 대괄호를 사용합니다.
var my_array:Array = []; 
var my_array:Array = new Array(); 

다음 예제에서는 요소가 세 개인 employee_array 배열을 만들고 배열의 세 번째 요소를 변경합니다.

var employee_array = ["Barbara", "George", "Mary"]; 
trace(employee_array); // Barbara,George,Mary 
employee_array[2] = "Sam"; 
trace(employee_array); // Barbara,George,Sam 
다음 예제에서는 대괄호 내의 표현식을 평가하고 평가 결과를 obj 객체에서 검색할 변수의 이름으로 사용합니다.
var obj:Object = new Object();
obj.prop1 = "foo";
obj.prop2 = "bar";

for (var i:int = 1;i < 3;i++) {
    trace(obj["prop"+i]);
}
/* Output of for loop:
foo
bar */ 

참고 사항

as 연산자  
구문
expression as datatype

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

첫 번째 피연산자로 지정된 표현식이 두 번째 피연산자로 지정된 데이터 유형의 멤버인지 평가합니다. 첫 번째 피연산자가 해당 데이터 유형의 멤버이면 결과는 첫 번째 피연산자입니다. 그렇지 않으면 결과는 null 값입니다.

두 번째 피연산자에 사용된 표현식은 데이터 유형으로 평가되어야 합니다.

피연산자
expression:* — 지정된 데이터 유형에 대해 검사할 값입니다.
datatype:Class — expression 피연산자를 평가하는 데 사용되는 데이터 유형입니다. 유형이 지정되지 않았음을 의미하는 특수 * 유형은 사용할 수 없습니다.

결과
Object — expression이 datatype에 지정된 데이터 유형의 멤버이면 결과는 expression입니다. 그렇지 않으면 결과는 null 값입니다.

예제 
예제 사용 방법 
다음 예제에서는 myArray라는 간단한 배열을 만들고 as 연산자를 다양한 데이터 유형과 함께 사용합니다.
public var myArray:Array = ["one", "two", "three"];
trace(myArray as Array);  // one,two,three
trace(myArray as Number); // null
trace(myArray as int);    // null

참고 사항

= assignment 연산자  
구문
expression1 = expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression2의 값(오른쪽 피연산자)을 expression1의 변수, 배열 요소 또는 속성에 대입합니다. 이때 값 또는 참조를 기준으로 대입할 수 있습니다. 값을 기준으로 하는 대입은 expression2의 실제 값을 복사하여 이를expression1에 저장합니다. 값을 기준으로 하는 대입은 expression2이 원시 값일 때, 즉 값의 데이터 유형이 Boolean, Number, int, uint 또는 String인 경우에 사용됩니다. 참조를 기준으로 하는 대입은 expression1expression2에 대한 참조를 저장합니다. 참조를 기준으로 하는 대입은 주로 new 연산자와 함께 사용됩니다. new 연산자는 메모리에 객체를 만들고, 메모리의 해당 위치에 대한 참조가 변수에 지정됩니다.

참고: ActionScript 3.0에서 모든 값(원시 값 포함)은 객체이며 모든 대입은 참조로 수행됩니다. 그러나 원시 객체에는 값을 기준으로 대입되는 것처럼 처리해주는 특수 연산자가 있습니다.

피연산자
expression1:* — 변수, 배열 요소 또는 객체의 속성입니다.
expression2:* — 모든 유형의 값입니다.

결과
Object — 대입된 값인 expression2입니다.

예제 
예제 사용 방법 
다음 예제에서는 값을 기준으로 하는 대입을 사용하여 변수 z에 값 5를 대입합니다.
var z:Number = 5;
다음 예제에서는 값을 기준으로 하는 대입을 사용하여 변수 z에 "hello"라는 값을 대입합니다.
var x:String;
x = "hello";
다음은 참조를 기준으로 하는 대입을 사용하여 moonsOfJupiter 변수를 만드는 예제입니다. 이 변수에는 새로 만든 Array 객체에 대한 참조가 포함됩니다. 이번에는 다시 값을 기준으로 하는 대입을 사용하여 "Callisto"라는 값을moonsOfJupiter 변수가 참조하는 배열의 첫 번째 요소에 복사합니다.
var moonsOfJupiter:Array = new Array();
moonsOfJupiter[0] = "Callisto";
다음 예제에서는 참조를 기준으로 하는 대입을 사용하여 새 객체를 만들고 이 객체에 대한 참조를 변수 mercury에 대입합니다. 이번에는 다시 값을 기준으로 하는 대입을 사용하여 값 3030을 mercury 객체의 diameter 속성에 대입합니다.
var mercury:Object = new Object();
mercury.diameter = 3030; // in miles
trace(mercury.diameter); // 3030
다음 예제에서는 위의 예제를 바탕으로 mercury를 뜻하는 독일어인 merkur라는 변수를 만들고 여기에 mercury 값을 대입합니다. 이렇게 하면 메모리에서 같은 객체를 참조하는 변수가 두 개 만들어지고 둘 중 어느 변수를 사용하더라도 해당 객체의 속성에 액세스할 수 있습니다. 마일 대신 킬로미터 단위를 사용하도록 diameter 속성을 변경할 수도 있습니다.
var merkur:Object = mercury;
merkur.diameter = 4878;  // in kilometers
trace(mercury.diameter); // 4878

참고 사항

@ attribute identifier 연산자  
구문
 myXML.@attributeName 

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

XML 또는 XMLList 객체의 속성을 식별합니다. 예를 들어, myXML.@id는 myXML XML 객체의 id 속성을 식별합니다. 또한 myXML.attribute("id")myXML["@id"] 및 myXML.@["id"] 구문을 사용하여 속성에 액세스할 수 있습니다.myXML.@id 구문을 사용하는 것이 좋습니다. 모든 속성 이름의 XMLList 객체를 반환하려면 @*를 사용합니다. ActionScript 예약어와 일치하는 이름의 속성을 반환하려면 @ 연산자 대신 attribute() 메서드를 사용합니다.

피연산자
attributeName:* — 특성의 이름입니다.

예제 
예제 사용 방법 
첫 번째 예제에서는 @(at 기호) 연산자를 사용하여 요소의 속성을 식별합니다.
var myXML:XML = 
    <item id = "42">
        <catalogName>Presta tube</catalogName>
        <price>3.99</price>
    </item>;

trace(myXML.@id); // 42
다음 예제에서는 모든 속성 이름을 반환합니다.
var xml:XML =<example id='123' color='blue'/>
 var xml2:XMLList = xml.@*;
 trace(xml2 is XMLList); // true
 trace(xml2.length());  // 2
 for (var i:int = 0; i < xml2.length(); i++)
 { 
    trace(typeof(xml2[i]));    // xml
    trace(xml2[i].nodeKind()); // attribute
    trace(xml2[i].name());     // id and color
 } 
다음 예제에서는 ActionScript의 예약어와 일치하는 이름의 속성을 반환합니다. class가 ActionScript 예약어이므로 xml.@class 구문은 사용할 수 없습니다. xml.attribute("class") 구문을 사용해야 합니다.
var xml:XML = <example class='123'/>
trace(xml.attribute("class"));

참고 사항

& bitwise AND 연산자  
구문
expression1 & expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1 및 expression2를 32비트 부호 없는 정수로 변환하고 정수 매개 변수의 각 비트에 대해 부울 AND 연산을 수행합니다. 부동 소수점 숫자는 소수점 뒤의 숫자를 제거하여 정수로 변환됩니다. 그 결과로 새 32비트 정수가 생깁니다.

양의 정수는 최대값이 4294967295 또는 0xFFFFFFFF인 부호 없는 16진수 값으로 변환되고, 최대값보다 큰 값은 변환될 때 32비트 값을 유지하기 위해 최상위 자릿수를 버립니다. 음수는 2의 보수 표기를 사용하여 최소값이 -2147483648 또는 0x800000000인 부호 없는 16진수 값으로 변환되고, 최소값 미만의 숫자는 정밀도가 더 높은 2의 보수로 변환된 후 최상위 자릿수를 버립니다.

결과는 32비트 2의 보수로 해석되므로 -2147483648에서 2147483647 범위의 정수가 됩니다.

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 13(이진수 값 1101)과 11(이진수 값 1011)의 비트 표현을 비교하여 비트 AND를 수행합니다. 결과 정수는 일련의 비트로 구성되며, 각 비트는 같은 위치에 있는 두 피연산자의 비트가 1인 경우에만 1로 설정됩니다.
var insert:Number = 13; 
var update:Number = 11; 
trace(insert & update); // 9 (or 1001 binary) 
13(이진수 값 1101)과 11(이진수 값 1011)의 비트 AND 연산 결과는 9입니다. 첫 번째 자리와 마지막 자리에서만 두 숫자 모두 1을 갖기 때문입니다.
  1101
& 1011
  ----
  1001

다음 예제는 반환값 변환의 비헤이비어를 보여 줍니다.

trace(0xFFFFFFFF); // 4294967295 
trace(0xFFFFFFFF & 0xFFFFFFFF); // -1 
trace(0xFFFFFFFF & -1); // -1 
trace(4294967295 & -1); // -1 
trace(4294967295 & 4294967295); // -1 

참고 사항

&= bitwise AND assignment 연산자  
구문
expression1 &= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 & expression2의 값을 대입합니다. 예를 들어, 다음 두 표현식은 동일합니다.

x &= y; 
x = x & y; 

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다.

결과
int — expression1 & expression2의 값입니다.

예제 
예제 사용 방법 
다음 예제에서는 값 9를 x에 대입합니다.
var x:Number = 15; 
var y:Number = 9; 
trace(x &= y); // 9 

참고 사항

<< bitwise left shift 연산자  
구문
expression1 << shiftCount

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1 및 shiftCount를 32비트 정수로 변환하고, expression1의 모든 비트를 shiftCount 변환 결과 정수값으로 지정된 자릿수만큼 왼쪽으로 이동합니다. 이 연산을 수행한 결과 비어 있는 비트 위치는 0으로 채워지고 왼쪽 끝으로 이동된 비트는 제거됩니다. 값을 왼쪽으로 한 자리씩 이동하는 것은 산술적으로 2를 곱하는 것과 같습니다.

부동 소수점 숫자는 소수점 뒤의 숫자를 제거하여 정수로 변환됩니다. 양의 정수는 최대값이 4294967295 또는 0xFFFFFFFF인 부호 없는 16진수 값으로 변환되고, 최대값보다 큰 값은 변환될 때 32비트 값을 유지하기 위해 최상위 자릿수를 버립니다. 음수는 2의 보수 표기를 사용하여 최소값이 -2147483648 또는 0x800000000인 부호 없는 16진수 값으로 변환되고, 최소값 미만의 숫자는 정밀도가 더 높은 2의 보수로 변환된 후 최상위 자릿수를 버립니다.

결과는 32비트 2의 보수로 해석되므로 -2147483648에서 2147483647 범위의 정수가 됩니다.

결과가 음의 정수인 경우 결과를 uint 유형의 변수에 대입하려고 하면 런타임 오류가 발생합니다. ActionScript에는 "부호 없는 비트 왼쪽 시프트" 연산자가 없지만 uint(expression1 << shiftCount)를 사용하여 런타임 오류 없이 동일한 효과를 얻을 수 있습니다.

var num1:uint = 0xFF;
var num2:uint = uint(num1 << 24); // uint() prevents runtime error

피연산자
expression1:Number — 왼쪽으로 이동할 숫자 또는 표현식입니다.
shiftCount:Number — 0부터 31까지의 정수로 변환되는 숫자 또는 표현식입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 정수 1이 왼쪽으로 10비트 이동합니다.
x = 1 << 10
비트 왼쪽 시프트 연산자의 결과는 1024입니다. 십진수 1은 이진수 1과 같고, 이진수 1을 왼쪽으로 10회 이동하면 이진수 10000000000이 되며, 이진수 10000000000은 십진수 1024이기 때문입니다.
   00000000001(이진수) 
<<           10(십진수)
--------------
   10000000000(이진수)(십진수로 1024)

다음 예제에서는 정수 7이 왼쪽으로 8비트 이동합니다.

x = 7 << 8
비트 왼쪽 시프트 연산자의 결과는 1792입니다. 십진수 7은 이진수 111과 같고, 이진수 111을 왼쪽으로 8회 이동하면 이진수 11100000000이 되며, 이진수 11100000000은 십진수 1792이기 때문입니다.
   00000000111(이진수) 
<<           8(십진수)
--------------
   11100000000(이진수)(십진수로 1792)

다음 trace 문은 비트가 왼쪽으로 세 자리 밀린 것을 보여 줍니다.

// 1 binary == 0001 
// 8 binary == 1000 
trace(1 << 3); // 8 

참고 사항

<<= bitwise left shift and assignment 연산자  
구문
expression1 <<= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

비트 왼쪽 시프트(<<=) 연산을 수행하고 그 결과를 expression1에 저장합니다. 다음 두 표현식은 동일합니다.

A <<= B
A = (A << B)

피연산자
expression1:Number — 왼쪽으로 이동할 숫자 또는 표현식입니다.
expression2:Number — 0부터 31까지의 정수로 변환되는 숫자 또는 표현식입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 비트 왼쪽 시프트 및 대입(<<=) 연산자를 사용하여 모든 비트를 왼쪽으로 한 자리 이동합니다.
var x:Number = 4; 
// Shift all bits one slot to the left. 
x <<= 1; 
trace(x); // 8 
// 4 decimal = 0100 binary 
// 8 decimal = 1000 binary 

참고 사항

~ bitwise NOT 연산자  
구문
~expression

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression을 32비트 부호 있는 정수로 변환한 다음 비트 1의 보수를 적용합니다. 즉, 결과에서 0인 비트는 모두 1로 설정되고 1인 비트는 모두 0으로 설정됩니다. 그 결과 부호 있는 32비트 정수가 만들어집니다. 이 연산자는 1의 보수 연산자 또는 비트 보수 연산자라고도 합니다.

예를 들어, 16진수 값 0x7777은 다음과 같은 2진 숫자로 표시됩니다.

0111011101110111

이 16진수 값의 비트 부정 ~0x7777은 다음과 같은 이진 숫자입니다.

1000100010001000

16진수에서 이 값은 0x8888입니다. 따라서 ~0x7777은 0x8888입니다.

비트 연산자는 플래그 비트(각각 1비트로 패키지된 부울 값)를 표시하는 데 가장 일반적으로 사용됩니다.

부동 소수점 숫자는 소수점 뒤의 숫자를 제거하여 정수로 변환됩니다. 양의 정수는 최대값이 4294967295 또는 0xFFFFFFFF인 부호 없는 16진수 값으로 변환되고, 최대값보다 큰 값은 변환될 때 32비트 값을 유지하기 위해 최상위 자릿수를 버립니다. 음수는 2의 보수 표기를 사용하여 최소값이 -2147483648 또는 0x800000000인 부호 없는 16진수 값으로 변환되고, 최소값 미만의 숫자는 정밀도가 더 높은 2의 보수로 변환된 후 최상위 자릿수를 버립니다.

결과는 32비트 2의 보수로 해석되므로 -2147483648에서 2147483647 범위의 정수가 됩니다.

피연산자
expression:Number — 변환할 숫자입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 비트 NOT(~) 연산자를 플래그 비트와 함께 사용하는 방법을 보여 줍니다.
var ReadOnlyFlag:int = 0x0001; // defines bit 0 as the read-only flag 
var flags:int = 0; 
trace(flags); 
/* To set the read-only flag in the flags variable, 
   the following code uses the bitwise OR: 
*/
flags |= ReadOnlyFlag; 
trace(flags); 
/* To clear the read-only flag in the flags variable, 
   first construct a mask by using bitwise NOT on ReadOnlyFlag. 
   In the mask, every bit is a 1 except for the read-only flag. 
   Then, use bitwise AND with the mask to clear the read-only flag. 
   The following code constructs the mask and performs the bitwise AND: 
*/ 
flags &= ~ReadOnlyFlag; 
trace(flags); 
// 0 1 0 

참고 사항

| bitwise OR 연산자  
구문
expression1 | expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1 및 expression2를 32비트 부호 없는 정수로 변환하고, expression1 또는 expression2의 해당 비트가 1인 각 비트 위치에 1을 배치합니다.

부동 소수점 숫자는 소수점 뒤의 숫자를 제거하여 정수로 변환됩니다. 양의 정수는 최대값이 4294967295 또는 0xFFFFFFFF인 부호 없는 16진수 값으로 변환되고, 최대값보다 큰 값은 변환될 때 32비트 값을 유지하기 위해 최상위 자릿수를 버립니다. 음수는 2의 보수 표기를 사용하여 최소값이 -2147483648 또는 0x800000000인 부호 없는 16진수 값으로 변환되고, 최소값 미만의 숫자는 정밀도가 더 높은 2의 보수로 변환된 후 최상위 자릿수를 버립니다.

결과는 32비트 2의 보수로 해석되므로 -2147483648에서 2147483647 범위의 정수가 됩니다.

피연산자
expression1:Number — 숫자입니다.
expression2:Number — 숫자입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음은 비트 OR (|) 연산 예제입니다.
// 15 decimal = 1111 binary 
var a:Number = 15; 
// 9 decimal = 1001 binary 
var b:Number = 9; 
// 1111 | 1001 = 1111 
trace(a | b); // returns 15 decimal (1111 binary) 
단일 |(비트 OR)과 ||(논리 OR)을 혼동하지 마십시오.

참고 사항

|= bitwise OR assignment 연산자  
구문
expression1 |= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 | expression2의 값을 대입합니다. 예를 들어, 다음 두 명령문은 동일합니다.

x |= y; 
x = x | y; 

피연산자
expression1:Number — 변환할 숫자입니다.
expression2:Number — 변환할 숫자입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 비트 OR 대입(|=) 연산자를 사용합니다.
// 15 decimal = 1111 binary 
var a:Number = 15; 
// 9 decimal = 1001 binary 
var b:Number = 9; 
// 1111 |= 1001 = 1111 
trace(a |= b); // returns 15 decimal (1111 binary) 

참고 사항

>> bitwise right shift 연산자  
구문
expression >> shiftCount

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression 및 shiftCount를 32비트 정수로 변환하고, expression의 모든 비트를 shiftCount 변환 결과로 나온 정수로 지정된 자릿수만큼 오른쪽으로 이동합니다. 오른쪽 끝으로 이동된 비트는 제거됩니다. 원래 표현식의 부호를 유지하려는 경우, expression의 최상위 비트(가장 왼쪽 비트)가 0이면 왼쪽 비트를 0으로 채우고 최상위 비트가 1이면 왼쪽 비트를 1로 채웁니다. 값을 오른쪽으로 한 자리 이동하는 것은 이 값을 2로 나누고 나머지를 버리는 것과 같습니다.

부동 소수점 숫자는 소수점 뒤의 숫자를 제거하여 정수로 변환됩니다. 양의 정수는 최대값이 4294967295 또는 0xFFFFFFFF인 부호 없는 16진수 값으로 변환되고, 최대값보다 큰 값은 변환될 때 32비트 값을 유지하기 위해 최상위 자릿수를 버립니다. 음수는 2의 보수 표기를 사용하여 최소값이 -2147483648 또는 0x800000000인 부호 없는 16진수 값으로 변환되고, 최소값 미만의 숫자는 정밀도가 더 높은 2의 보수로 변환된 후 최상위 자릿수를 버립니다.

결과는 32비트 2의 보수로 해석되므로 -2147483648에서 2147483647 범위의 정수가 됩니다.

피연산자
expression:Number — 오른쪽으로 이동할 숫자 또는 표현식입니다.
shiftCount:Number — 0부터 31까지의 정수로 변환되는 숫자 또는 표현식입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 65535를 32비트 정수로 변환하고 오른쪽으로 8비트 이동하여 십진수 255를 결과로 얻습니다.
var a:Number = 65535 >> 8; 
trace(a); // 255
십진수 65535는 이진수 00000000000000001111111111111111(16개의 0과 16개의 1)과 같으며, 이 값을 오른쪽으로 8비트 이동하면 가장 오른쪽에서부터 8개의 비트가 버려집니다. 65535는 양수이므로 이동으로 인해 비워진 가장 왼쪽에서부터 8개의 비트가 0으로 채워집니다. 결과는 이진수 00000000000000000000000011111111(24개의 0과 8개의 1)이 되며 이것은 32비트 정수 255와 같습니다.
    00000000000000001111111111111111(이진수)(십진수로 65535)
>>                                8(십진수)
--------------------
    00000000000000000000000011111111(이진수)(십진수로 255)
다음 예제에서는 -8을 32비트 정수로 변환하고 오른쪽으로 1비트 이동하여 십진수 -4를 결과로 얻습니다.
var a:Number = -8 >> 1;
trace(a); // -4
십진수 -8은 이진수 11111111111111111111111111111000(29개의 1과 3개의 0)과 같으며, 이 값을 오른쪽으로 1비트 이동하면 가장 오른쪽 비트가 버려집니다. -8은 음수이므로 이동으로 인해 비워진 비트 위치(가장 왼쪽 비트)가 1로 채워집니다. 결과는 이진수 11111111111111111111111111111100(30개의 1과 2개의 0)이 되며 이것은 32비트 정수 -4와 같습니다.
    11111111111111111111111111111000(이진수)(십진수로 -8)
>>                                1(십진수)
--------------------
    11111111111111111111111111111100(이진수)(십진수로 -4)

참고 사항

>>= bitwise right shift and assignment 연산자  
구문
expression >>= shiftCount

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

비트 오른쪽 시프트 연산을 수행하고 그 결과를 expression에 저장합니다.

다음 두 명령문은 동일합니다.

A >>= B; 
A = (A >> B);

피연산자
expression:Number — 오른쪽으로 이동할 숫자 또는 표현식입니다.
shiftCount:Number — 0부터 31까지의 정수로 변환되는 숫자 또는 표현식입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 코드 예제에서는 비트 오른쪽 시프트 및 대입(>>=) 연산자를 사용합니다.
function convertToBinary(numberToConvert:Number):String { 
    var result:String = ""; 
    for (var i = 0; i < 32; i++) { 
        // Extract least significant bit using bitwise AND. 
        var lsb:Number = numberToConvert & 1; 
        // Add this bit to the result.
        result = (lsb ? "1" : "0")+result; 
        // Shift numberToConvert right by one bit, to see next bit. 
        numberToConvert >>= 1; 
    } 
    return result; 
} 
trace(convertToBinary(479)); 
// Returns the string 00000000000000000000000111011111. 
// This string is the binary representation of the decimal number 479.

참고 사항

>>> bitwise unsigned right shift 연산자  
구문
expression >>> shiftCount

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

왼쪽 비트에는 항상 0이 채워지므로 원래 표현식의 부호가 유지되지 않는다는 점을 제외하면 비트 오른쪽 시프트(>>) 연산자와 동일합니다.

부동 소수점 숫자는 소수점 뒤의 숫자를 제거하여 정수로 변환됩니다. 양의 정수는 최대값이 4294967295 또는 0xFFFFFFFF인 부호 없는 16진수 값으로 변환되고, 최대값보다 큰 값은 변환될 때 32비트 값을 유지하기 위해 최상위 자릿수를 버립니다. 음수는 2의 보수 표기를 사용하여 최소값이 -2147483648 또는 0x800000000인 부호 없는 16진수 값으로 변환되고, 최소값 미만의 숫자는 정밀도가 더 높은 2의 보수로 변환된 후 최상위 자릿수를 버립니다.

결과는 부호 없는 32비트 정수로 해석되므로 0에서 4294967295 범위의 정수가 됩니다.

참고: ActionScript에는 보완되는 "부호 없는 비트 왼쪽 시프트" 연산자가 없지만 uint(expression << shiftCount)를 사용하여 동일한 작업을 수행할 수 있습니다.

피연산자
expression:Number — 오른쪽으로 이동할 숫자 또는 표현식입니다.
shiftCount:Number — 0부터 31까지의 정수로 변환되는 숫자 또는 표현식입니다.

결과
uint — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 -1을 32비트 정수로 변환하고 오른쪽으로 1비트 이동합니다.
var a:Number = -1 >>> 1; 
trace(a); // 2147483647 
10진수 -1은 이진수 11111111111111111111111111111111(32개의 1)과 같고, 오른쪽으로 1비트 이동하면(부호 없음) 가장 오른쪽의 최하위 비트가 버려지고 가장 왼쪽의 최상위 비트에는 0이 채워지기 때문에 이런 결과가 나타납니다. 결과는 이진수 01111111111111111111111111111111이며 이 값은 32비트 정수 2147483647을 나타냅니다.

참고 사항

>>>= bitwise unsigned right shift and assignment 연산자  
구문
expression >>>= shiftCount

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

부호 없는 비트 오른쪽 시프트 연산을 수행하고 그 결과를 expression에 저장합니다. 다음 두 명령문은 동일합니다.

A >>>= B; 
A = (A >>> B); 

피연산자
expression:Number — 오른쪽으로 이동할 숫자 또는 표현식입니다.
shiftCount:Number — 0부터 31까지의 정수로 변환되는 숫자 또는 표현식입니다.

결과
uint — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 -1을 32비트 정수로 변환하고 오른쪽으로 1비트 이동합니다.
var a:Number = -1;
a >>>= 1; 
trace(a); // 2147483647 
10진수 -1은 이진수 11111111111111111111111111111111(32개의 1)과 같고, 오른쪽으로 1비트 이동하면(부호 없음) 가장 오른쪽의 최하위 비트가 버려지고 가장 왼쪽의 최상위 비트에는 0이 채워지기 때문에 이런 결과가 나타납니다. 결과는 이진수 01111111111111111111111111111111이며 이 값은 32비트 정수 2147483647을 나타냅니다.

참고 사항

^ bitwise XOR 연산자  
구문
expression1 ^ expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1 및 expression2를 32비트 부호 없는 정수로 변환하고, expression1 또는 expression2 중 하나의 해당 비트가 1인 각 비트 위치에 1을 배치합니다.

부동 소수점 숫자는 소수점 뒤의 숫자를 제거하여 정수로 변환됩니다. 양의 정수는 최대값이 4294967295 또는 0xFFFFFFFF인 부호 없는 16진수 값으로 변환되고, 최대값보다 큰 값은 변환될 때 32비트 값을 유지하기 위해 최상위 자릿수를 버립니다. 음수는 2의 보수 표기를 사용하여 최소값이 -2147483648 또는 0x800000000인 부호 없는 16진수 값으로 변환되고, 최소값 미만의 숫자는 정밀도가 더 높은 2의 보수로 변환된 후 최상위 자릿수를 버립니다.

결과는 32비트 2의 보수로 해석되므로 -2147483648에서 2147483647 범위의 정수가 됩니다.

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 십진수 15와 9에 비트 XOR 연산자를 사용하고 그 결과를 변수 a에 대입합니다.
// 15 decimal = 1111 binary 
// 9 decimal = 1001 binary 
var a:Number = 15 ^ 9; 
trace(a); 
// 1111 ^ 1001 = 0110 
// returns 6 decimal (0110 binary) 

참고 사항

^= bitwise XOR assignment 연산자  
구문
expression1 ^= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 ^ expression2의 값을 대입합니다. 예를 들어, 다음 두 명령문은 동일합니다.

x ^= y 
x = x ^ y 

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다.

결과
int — 비트 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 비트 XOR 대입(^=) 연산을 보여 줍니다.
// 15 decimal = 1111 binary 
var a:Number = 15; 
// 9 decimal = 1001 binary 
var b:Number = 9; 
trace(a ^= b); // returns 6 decimal (0110 binary) 

참고 사항

/*..*/ block comment delimiter 연산자  
구문
/*주석 */
/* 주석
   주석 */

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

한 줄 이상의 스크립트 주석을 구분합니다. 열기 기호(/*)와 닫기 기호(*/) 사이에 존재하는 문자는 주석으로 해석되며 ActionScript 인터프리터에서 무시됩니다. 이러한 기호를 사용하여 연속되는 여러 행으로 구성된 주석을 식별할 수 있으며, 한 줄 주석을 식별하려면 // 기호를 사용합니다.

닫기 블록 주석 기호(*/)를 생략하거나 주석을 중첩하려고 시도하면 오류 메시지가 표시됩니다. 열기 기호(/*)가 사용된 후 첫 번째 닫기 기호(*/)가 나타나면 닫기 기호 이전까지 배치된 열기 기호의 수와 상관 없이 주석이 끝납니다.

피연산자
comment:* — 모든 문자입니다.

예제 
예제 사용 방법 
다음 스크립트에서는 스크립트 시작 부분에 블록 주석 기호를 사용합니다.
/* records the X and Y positions of 
the ball and bat movie clips */ 
var ballX:Number = ball_mc._x; 
var ballY:Number = ball_mc._y; 
var batX:Number = bat_mc._x; 
var batY:Number = bat_mc._y; 
다음과 같이 주석을 중첩하려고 시도하면 오류 메시지가 나타납니다.
/* This is an attempt to nest comments. 
/* But the first closing tag will be paired 
with the first opening tag */ 
and this text will not be interpreted as a comment */ 

참고 사항

{ } braces (XML) 연산자  
구문
 myXML= <{tagName} {attributeName} = {attributeValue}>{content}</{tagName}>

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

XML 또는 XMLList 이니셜라이저에 사용된 표현식을 평가합니다. XML 또는 XMLList 이니셜라이저는 XML 또는 XMLList 유형의 변수에 대입된 리터럴 값입니다. XML { 및 } 연산자로 구분된 표현식은 XML 또는 XMLList 이니셜라이저에서 리터럴 이름 또는 값 대신 사용될 수 있습니다. 표현식은 tagNameattributeNameattributeValue 및 content 대신 사용될 수 있습니다.

피연산자
myXML:* — XML 또는 XMLList 객체입니다.
tagName:* — XML 태그 이름으로 평가되는 표현식입니다.
attributeName:* — XML 속성 이름으로 평가되는 표현식입니다.
attributeValue:* — XML 속성 값으로 평가되는 표현식입니다.
content:* — XML 태그의 내용으로 평가되는 표현식입니다.

예제 
예제 사용 방법 
다음 예제에서는 XML 리터럴을 정의할 때 { 및 } 연산자를 사용하는 방법을 보여 줍니다.
var tagname:String = "item"; 
var attributename:String = "id"; 
var attributevalue:String = "5"; 
var content:String = "Chicken"; 
var x:XML = <{tagname} {attributename}={attributevalue}>{content}</{tagname}>; 
trace(x.toXMLString()); // <item id="5">Chicken</item>

참고 사항

[ ] brackets (XML) 연산자  
구문
 myXML[expression]

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

XML 또는 XMLList 객체의 속성 또는 특성에 액세스합니다. 대괄호 연산자를 사용하면 도트(.) 연산자로 액세스할 수 없는 속성 이름에 액세스할 수 있습니다.

피연산자
myXML:* — XML 또는 XMLList 객체입니다.
expression:* — XML 태그 또는 속성의 이름으로 평가되는 표현식입니다.

예제 
예제 사용 방법 
다음 예제에서는 태그 이름에 포함된 하이픈 때문에 도트 연산자를 통해 액세스할 수 없는 XML 속성에 [ 및 ] 연산자를 사용하여 액세스하는 방법을 보여 줍니다.
var myXML:XML = <a><foo-bar>44</foo-bar></a>;
trace(myXML["foo-bar"]);

참고 사항

, comma 연산자  
구문
(expression1, expression2[, expressionN... ])

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1expression2 등을 평가합니다. 이 연산자는 주로 for 루프 명령문과 함께 사용되거나 괄호 () 연산자와 함께 사용됩니다.

피연산자
expression1:* — 평가할 표현식입니다.
expression2:* — 평가할 표현식입니다.
expressionN:* — 추가로 평가할 표현식의 수입니다.

결과
Object — 평가된 표현식의 값입니다.

예제 
예제 사용 방법 
다음 예제에서는 for 루프에서 쉼표(,) 연산자를 사용합니다.
for (i = 0, j = 0; i < 3 && j < 3; i++, j+=2) { 
    trace("i = " + i + ", j = " + j); 
} 
// output: 
// i = 0, j = 0 
// i = 1, j = 2
다음 예제에서는 괄호 연산자 없이 쉼표 연산자만을 사용하여 쉼표 연산자의 우선 순위가 대입(=) 연산자보다 낮음을 보여 줍니다.
var v:Number = 0; 
v = 4, 5, 6; 
trace(v); // 4 
다음 예제에서는 쉼표 연산자를 괄호와 함께 사용하여 쉼표 연산자가 마지막 표현식의 값을 반환함을 보여 줍니다.
var v:Number = 0; 
v = (4, 5, 6); 
trace(v); // 6 
다음 예제에서는 괄호 연산자 없이 쉼표 연산자만을 사용하여 모든 표현식이 쉼표 연산자로 인해 순차적으로 평가됨을 보여 줍니다. 첫 번째 표현식 v + 4는 대입(=) 연산자가 쉼표 연산자보다 우선 순위가 높기 때문에 변수 v에 대입됩니다. 두 번째 표현식 z++가 평가되고 z가 1만큼 증가됩니다.
var v:Number = 0; 
var z:Number = 0; 
v = v + 4 , z++, v + 6; 
trace(v); // 4 
trace(z); // 1 
다음 예제는 괄호가 추가되었다는 점을 제외하고 이전 예제와 동일합니다. 이 예제에서는 괄호 때문에 연산 순서가 바뀌면서 쉼표 연산자가 대입(=) 연산자보다 먼저 평가됩니다.
var v:Number = 0; 
var z:Number = 0; 
v = (v + 4, z++, v + 6); 
trace(v); // 6 
trace(z); // 1 

참고 사항

+ concatenation 연산자  
구문
expression1 + expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

문자열을 연결 또는 결합합니다. 한 표현식이 문자열이면 다른 표현식도 모두 문자열로 변환된 후 연결됩니다.

두 표현식이 모두 숫자이면 이 연산자는 더하기 연산자로 동작합니다.

피연산자
expression1:String — 연결할 문자열입니다.
expression2:String — 연결할 문자열입니다.

결과
String — 연결된 문자열입니다.

예제 
예제 사용 방법 
다음 예제에서는 두 문자열을 연결합니다.
var lastName:String = "Cola"; 
var instrument:String = "Drums"; 
trace(lastName + " plays " + instrument); // Cola plays Drums 
이 예제에서는 한 표현식이 문자열일 때 다른 모든 표현식도 문자열로 변환되어 연결된다는 것을 보여 줍니다.
trace("Number " + 8 + 0); // Number 80
다음 예제에서는 문자열 표현식의 오른쪽에 있는 수식 합계가 문자열로 변환되기 때문에 계산되지 않는다는 것을 보여 줍니다.
var a:String = 3 + 10 + "asdf"; 
trace(a); // 13asdf 
var b:String = "asdf" + 3 + 10; 
trace(b); // asdf310 

참고 사항

+ concatenation (XMLList) 연산자  
구문
expression1 + expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

XML 또는 XMLList 값을 XMLList 객체로 연결(결합)합니다. 두 피연산자가 모두 XML 또는 XMLList 값인 경우에만 XMLList 객체가 반환됩니다.

피연산자
expression1:* — XML 또는 XMLList 값입니다.
expression2:* — XML 또는 XMLList 값입니다.

결과
XMLList — 연결된 XMLList 객체입니다.

예제 
예제 사용 방법 
다음 예제에서는 XMLList(+)(연결) 연산자를 사용하는 방법을 보여 줍니다.
var x1:XML = 
        <employee id = "42">
            <firstName>Joe</firstName>
            <lastName>Smith</lastName>
        </employee>;

var x2:XML = 
        <employee id = "43">
            <firstName>Susan</firstName>
            <lastName>Jones</lastName>
        </employee>;

var myXMLList:XMLList = x1 + x2;
    
trace(myXMLList.toXMLString()); 

trace 문은 다음과 같은 출력을 생성합니다.

<employee id = "42">
    <firstName>Joe</firstName>
    <lastName>Smith</lastName>
</employee>
<employee id = "43">
    <firstName>Susan</firstName>
    <lastName>Jones</lastName>
</employee>
    

참고 사항

+= concatenation assignment 연산자  
구문
expression1 += expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 + expression2의 값을 대입합니다. 예를 들어, 다음 두 명령문의 결과는 동일합니다.

x += y; 
x = x + y;
연결(+) 연산자의 모든 규칙은 연결 대입(+=) 연산자에 적용됩니다. someTextField.text += moreText처럼 TextField의 text 속성에 연결 대입을 사용하는 것은 TextField.appendText()에 비해 훨씬 효율성이 떨어집니다. 특히 많은 내용이 포함된 TextField의 경우 효율성에서 큰 차이가 납니다.

피연산자
expression1:String — 문자열입니다.
expression2:String — 문자열입니다.

결과
Number — 연결의 결과입니다.

예제 
예제 사용 방법 
이 예제에서는 += 연산자를 문자열 표현식과 함께 사용합니다.
var x1:String = "My name is "; 
x1 += "Gilbert"; 
trace(x1); // My name is Gilbert 

참고 사항

+= concatenation assignment (XMLList) 연산자  
구문
expression1 += expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

XMLList 객체인 expression1을 expression1 + expression2 값에 대입합니다. 예를 들어, 다음 두 명령문의 결과는 동일합니다.

x += y; 
x = x + y; 
XMLList 연결(+) 연산자의 모든 규칙은 XMLList 연결 대입(+=) 연산자에 적용됩니다.

피연산자
expression1:XMLList — 새 값을 추가하려는 XMLList 객체입니다.
expression2:* — XML 또는 XMLList 값입니다.

예제 
예제 사용 방법 
다음 예제에서는 XMLList 연결 대입(+=) 연산자를 사용하는 방법을 보여 줍니다.
var x1:XML = <location>Athens</location>;    
var x2:XML = <location>Paris</location>;        
myXMLList = x1 + x2;

var x3:XML = <location>Springfield</location>;
myXMLList += x3;
            
trace(myXMLList.toXMLString());

trace 문은 다음과 같은 출력을 생성합니다.

<location>Athens</location>
    
<location>Paris</location>    

<location>Springfield</location>

참고 사항

?: conditional 연산자  
구문
expression1 ? expression2 : expression3

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1을 평가하여 expression1의 값이 true이면 결과는 expression2의 값이고, 그렇지 않으면 결과는 expression3의 값입니다.

피연산자
expression1:Boolean — 부울 값으로 평가되는 표현식이며 주로 x < 5와 같은 비교 표현식입니다.
expression2:* — 모든 유형의 값입니다.
expression3:* — 모든 유형의 값입니다.

결과
* — expression2 또는 expression3의 값입니다.

예제 
예제 사용 방법 
다음 명령문은 첫 번째 표현식이 true로 평가되므로 변수 x의 값을 변수 z에 대입합니다.
var x:Number = 5; 
var y:Number = 10; 
var z = (x < 6) ? x: y; 
trace(z); // returns 5
다음 예제에서는 간략한 형식으로 작성된 조건문을 보여 줍니다.
var timecode:String = (new Date().getHours() < 11) ? "AM" : "PM"; 
trace(timecode); 
같은 조건문을 다음 예제와 같이 긴 형식으로 작성할 수도 있습니다.
if (new Date().getHours() < 11) { 
    var timecode:String = "AM"; 
} else { 
    var timecode:String = "PM"; 
}
trace(timecode); 

참고 사항

-- decrement 연산자  
구문
--expression
expression--

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

피연산자에서 1을 뺍니다. 피연산자는 변수, 배열 요소 또는 객체의 속성이 될 수 있습니다. 선행 감소 형식의 연산자(--expression)는 expression에서 1을 뺀 후 그 결과를 반환합니다. 후행 감소 형식의 연산자(expression--)는 expression에서 1을 뺀 후 expression의 초기값(빼기 이전의 값)을 반환합니다.

피연산자
expression:Number — 숫자 또는 숫자로 평가되는 변수입니다.

결과
Number — 감소된 값의 결과입니다.

예제 
예제 사용 방법 
선행 감소 형식의 연산자는 x를 2로 감소시키고(x - 1 = 2) 그 결과값을 y로 반환합니다.
var x:Number = 3; 
var y:Number = --x; // y is equal to 2
후행 감소 형식의 연산자는 x를 2로 감소시키고(x - 1 = 2) x의 초기값을 결과값 y로 반환합니다.
var x:Number = 3; 
var y:Number = x--; // y is equal to 3
다음 예제에서는 10부터 1까지 반복적으로 실행되며, 1회 반복될 때마다 카운터 변수 i는 1씩 감소합니다.
for (var i = 10; i > 0; i--) { 
    trace(i); 
}

참고 사항

delete 연산자  
구문
 참조 삭제

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

reference에 지정된 객체 속성을 삭제한 후 속성이 존재하지 않으면 결과가 true이고, 그렇지 않으면 false입니다. 존재하지 않는 속성이나 클래스에 정의되지 않은 동적 속성에 대해 delete 연산자를 호출하면 true가 반환됩니다.

reference 매개 변수를 삭제할 수 없으면 delete 연산자가 실패하고 false가 반환될 수 있습니다. var 문을 통해 선언된 고정된 속성 또는 변수는 삭제할 수 없습니다. 고정된 속성은 클래스 정의에 정의된 변수 또는 메서드입니다.

런타임에 추가된 동적 클래스가 아닌 경우 해당 클래스의 속성을 삭제하는 데 delete 연산자를 사용할 수 없습니다. 봉인 클래스의 속성은 delete 연산자를 사용하여 삭제할 수 없습니다. 대신 속성을 null로 설정하십시오.

참고: 객체를 삭제할 수는 없지만 객체에 대한 모든 참조를 제거하면 객체를 가비지 컬렉션에 사용할 수 있게 됩니다. 객체에 대한 가장 일반적인 참조는 객체를 가리키는 변수입니다. 변수를 null로 설정하여 그러한 참조를 제거할 수 있습니다. 가비지 수집기는 참조가 없는 모든 객체를 제거합니다.

피연산자
reference:* — 제거할 속성의 이름입니다.

결과
Boolean — 삭제가 성공하면 true이고, 실패하면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 객체의 속성을 삭제합니다.
// create the new object "account" 
var account:Object = new Object(); 
// assign property name to the account 
account.name = "Jon"; 
// delete the property 
delete account.name; 
trace(account.name); // undefined

// delete a nonexistent property
var fooDeleted:Boolean = delete account.foo;
trace(fooDeleted); // true

다음 예제는 배열 요소의 값을 삭제하지만 length 속성 값은 변경되지 않습니다.

var my_array:Array = new Array(); 
my_array[0] = "abc"; // my_array.length == 1 
my_array[1] = "def"; // my_array.length == 2 
my_array[2] = "ghi"; // my_array.length == 3 
// my_array[2] is deleted, but Array.length is not changed 
delete my_array[2]; 
trace(my_array.length); // 3 
trace(my_array); // abc,def,

다음 예제에서는 delete에서 반환된 부울 값을 이후 코드의 실행 여부를 결정하는 조건으로 사용하는 방법을 보여 줍니다. 항목이 이미 삭제된 상태에서 해당 항목에 대해 delete을 다시 호출하면 false가 반환됩니다.

var my_array:Array = [ "abc", "def", "ghi" ];
var deleteWasSuccessful:Boolean

deleteWasSuccessful = delete my_array[0];
if(deleteWasSuccessful) delete my_array[1];
deleteWasSuccessful = delete my_array[0];
if(deleteWasSuccessful) delete my_array[2];

trace(my_array) // outputs: undefined,undefined,ghi

참고 사항

delete (XML) 연산자  
구문
 참조 삭제

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

reference로 지정된 XML 요소 또는 속성을 삭제합니다.

XMLList 피연산자는 항상 유효한 XMLList 객체(빈 객체일 수도 있음)를 참조하므로 XMLList 피연산자와 함께 사용할 경우 delete 연산자의 결과는 항상 true입니다.

피연산자
reference:XMLList — 삭제할 XML 요소 또는 속성을 지정하는 XMLList 객체입니다.

결과
Boolean — 삭제가 성공하면 true이고, 실패하면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 속성을 삭제하고, 단일 요소를 삭제한 다음 여러 요소를 삭제하는 방법을 보여 줍니다.
 
var x1:XML = <x1>
                <a id = "52">AYY</a>
                <a>AYY 2 </a>
                <b>BEE</b>
                <c>CEE</c>
            </x1>;

trace(x1.toXMLString());
trace("___________");

delete x1.a.@id;

trace(x1.toXMLString());
trace("___________");

delete x1.b;

trace(x1.toXMLString());
trace("___________");

delete x1.a;

trace(x1.toXMLString());

출력은 다음과 같습니다.

<x1>
  <a id="52">AYY</a>
  <a>AYY 2</a>
  <b>BEE</b>
  <c>CEE</c>
</x1>
___________
<x1>
  <a>AYY</a>
  <a>AYY 2</a>
  <b>BEE</b>
  <c>CEE</c>
</x1>
___________
<x1>
  <a>AYY</a>
  <a>AYY 2</a>
  <c>CEE</c>
</x1>
___________
<x1>
  <c>CEE</c>
</x1>

다음 예제에서는 요소 자체는 삭제하지 않고 속성 및 자식 요소를 포함한 요소의 모든 내용을 삭제하는 방법을 보여 줍니다.
 
var xml:XML = 
            <order>
                <item id="121">hamburger</item>
                <item id="122">fries</item>
                <item id="123">chocolate shake</item>
            </order>;
delete xml.item[1].*;
delete xml.item[1].@*;
trace(xml);

이 예제의 출력은 다음과 같습니다.

<order>
  <tem id="121">hamburger</item>
  <item/>
  <item id="123">chocolate shake</item>
</order>

.. descendant accessor 연산자  
구문
 myXML..childElement1..@attributeName 

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

XML 또는 XMLList 객체의 자손 요소로 이동하거나 @ 연산자와 결합된 경우 자손의 일치하는 속성을 찾습니다. 일치하는 요소 또는 속성은 XML 또는 XMLList 객체의 바로 아래에 있는 자식이 아니어도 되며 트리에서 더 아래에 있을 수도 있습니다. XMLList 객체는 두 개 이상의 자식 요소 또는 속성이 일치할 수 있기 때문에 이 객체가 결과가 됩니다.

반환된 XMLList 객체의 노드 순서는 심도 우선 탐색의 결과입니다. 예를 들어, 다음과 같은 경우를 가정합니다.

var myXML:XML = <a>
			<b>one
				<c> 
					<b>two</b> 
				</c> 
			</b>
			<b>three</b>
		</a>;

trace(myXML..b[0].toXMLString());
trace("______________");
trace(myXML..b[1].toXMLString());
trace("______________");
trace(myXML..b[2].toXMLString());

다음 출력이 결과가 됩니다.

<b>
  one
  <c>
    <b>two</b>
  </c>
</b>
______________
<b>two</b>
______________
<b>three</b>

ActionScript 예약어와 동일한 이름의 자손을 반환하려면 다음 예제와 같이 자손(..) 연산자 대신 XML.descendants() 메서드를 사용합니다.

var xml:XML = 
<enrollees>
	<student id="239">
		<class name="Algebra" />
 		<class name="Spanish 2"/>
	</student>
	<student id="206">
		<class name="Trigonometry" />
 		<class name="Spanish 2" />
	</student>
 </enrollees>;
 trace(xml.descendants("class")); 
 

피연산자
myXML:Object — XML 또는 XMLList 객체입니다.
childElement1_or_attributeName — XML 속성의 이름 또는 속성의 이름입니다.

예제 
예제 사용 방법 
다음 예제에서는 자손 접근자(..) 연산자를 사용하여 XML 객체의 자손 요소를 반환하거나 요소의 속성을 반환하는 방법을 보여 줍니다.
var myXML:XML = 
    <employees>
        <employee id = "42">
            <firstName>Billy</firstName>
            <lastName>Einstein</lastName>
        </employee>
        <employee id = "43">
            <firstName>Sally</firstName>
            <lastName>Shostakovich</lastName>
        </employee>
    </employees>
    
trace(myXML..firstName); 
    // <firstName>Billy</firstName>
    // <firstName>Sally</firstName>
                
trace(myXML..@id); //4243

참고 사항

/ division 연산자  
구문
expression1 / expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1을 expression2로 나눕니다. 나누기 연산의 결과는 배정밀도 부동 소수점 숫자입니다.

피연산자
expression:Number — 숫자 또는 숫자로 평가되는 변수입니다.

결과
Number — 연산의 부동 소수점 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 피제수가 양수, 음수 또는 0일 때 0으로 나눈 결과가 다르다는 것을 보여 줍니다.
trace(3/0);   // Infinity
trace(-3/0);  // -Infinity
trace(0/0);   // NaN

참고 사항

/= division assignment 연산자  
구문
expression1 /= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 / expression2의 값을 대입합니다. 예를 들어, 다음 두 명령문은 동일합니다.

x /= y; 
x = x / y;

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 변수입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 변수입니다.

결과
Number — 숫자입니다.

예제 
예제 사용 방법 
다음 코드는 나누기 대입(/=) 연산자를 변수 및 숫자와 함께 사용하는 경우를 보여 줍니다.
var a:Number = 10; 
var b:Number = 2; 
a /= b; trace(a); // 5 

참고 사항

. dot 연산자  
구문
object.property_or_method

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

클래스 변수 및 메서드에 액세스하고, 객체 속성을 가져오고 설정하며, 가져온 패키지 또는 클래스를 구분합니다.

피연산자
object:Object — 클래스의 인스턴스입니다. 이 객체는 내장 ActionScript 클래스나 사용자 정의 클래스의 인스턴스입니다. 이 피연산자는 항상 도트 연산자(.)의 왼쪽에 옵니다.
property_or_method:* — 객체와 관련된 속성 또는 메서드의 이름입니다. 내장 클래스에 사용 가능한 모든 메서드와 속성은 해당 클래스의 메서드 및 속성 요약 표에 나열되어 있습니다. 이 피연산자는 언제나 도트(.) 연산자의 오른쪽에 사용됩니다.

결과
* — 도트 연산자의 오른쪽에 명명된 변수, 메서드 또는 속성입니다.

예제 
예제 사용 방법 
다음 예제에서는 도트 연산자를 구분 기호로 사용하여 Timer 클래스를 가져옵니다.
import flash.utils.Timer;
다음 예제에서는 일반 객체를 만든 다음 도트 연산자를 사용하여 새 속성을 추가합니다.
var obj:Object = new Object();
obj.propertyA = "hello";
trace(obj.propertyA);  // hello

참고 사항

. dot (XML) 연산자  
구문
myXML.childElement
myXML.@attributeName 

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

XML 또는 XMLList 객체의 자식 요소로 이동하거나 @ 연산자와 결합된 경우 XML 또는 XMLList 객체의 특성을 반환합니다. XMLList 객체는 두 개 이상의 자식 요소 또는 속성이 일치할 수 있기 때문에 이 객체가 반환됩니다.

ActionScript 예약어와 동일한 이름의 요소를 반환하려면 다음 예제와 같이 XML 도트(.) 연산자 대신 XML.elements() 메서드 또는 XML.descendants() 메서드를 사용합니다.

var xml:XML = 
	<student id="206">
		<class name="Trigonometry" />
		<class name="Spanish 2" />
	</student>;
trace(xml.elements("class"));
trace(xml.descendants("class")); 

피연산자
myXML:Object — XML 또는 XMLList 객체입니다.
childElement:* — XML 속성의 이름입니다.
attributeName:* — 속성의 이름입니다.

결과
XMLList — 지정된 XMLList입니다.

예제 
예제 사용 방법 
다음 예제에서는 도트(.) 연산자를 사용하여 XML 객체의 자식 요소를 반환하거나 요소의 속성을 반환하는 방법을 보여 줍니다.
var myXML:XML = 
    <employee id = "42">
        <firstName>Billy</firstName>
        <lastName>Einstein</lastName>
    </employee>;

trace(myXML.firstName); // Billy
trace(myXML.@id);       // 42

참고 사항

== equality 연산자  
구문
expression1 == expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

두 표현식이 동일한지 여부를 테스트합니다. 두 표현식이 동일한 경우 결과는 true입니다.

두 피연산자의 데이터 유형이 일치할 경우 동일함에 대한 정의는 피연산자의 데이터 유형에 따라 다릅니다.

  • int, uint 및 Boolean 유형의 값이 동일한 값을 갖고 있는 경우 서로 동일한 것으로 간주됩니다.
  • NaN 이외의 일치하는 값을 갖고 있는 숫자의 경우 서로 동일한 것으로 간주됩니다.
  • 두 피연산자의 값이 null 또는 undefined인 경우 서로 동일한 것으로 간주됩니다.
  • 문자열 표현식은 문자가 동일하고 문자 수도 같은 경우 서로 동일한 것으로 간주됩니다.
  • XML 객체의 경우:
    • 텍스트 또는 속성 노드인 피연산자와 간단한 내용을 갖고 있는 피연산자가 있는 경우 toString() 메서드를 사용하여 두 피연산자를 문자열로 변환한 다음 결과 문자열이 일치하면 두 피연산자는 동일한 것으로 간주됩니다.
    • 그렇지 않은 경우에는 두 객체의 정규화된 이름, 속성 및 자식 속성이 일치하는 경우에만 서로 동일한 것으로 간주됩니다.
  • XMLList 객체는 속성의 수가 같고 속성의 순서 및 값이 모두 일치하는 경우 서로 동일한 것으로 간주됩니다.
  • Namespace 객체의 경우, 두 객체의 uri 속성이 일치하면 값이 동일한 것으로 간주됩니다.
  • QName 객체의 경우, 두 객체의 uri 속성 및 localName 속성이 모두 일치하면 값이 동일한 것으로 간주됩니다.
  • 객체, 배열 및 함수를 나타내는 변수는 참조를 기준으로 비교됩니다. 이러한 두 변수는 동일한 객체, 배열 또는 함수를 참조하는 경우 서로 동일한 것으로 간주됩니다. 별도의 두 배열은 포함된 요소의 수가 같더라도 동일한 것으로 간주되지 않습니다.
피연산자의 데이터 유형이 일치하지 않는 경우 다음과 같은 상황을 제외하고 결과는 false입니다.
  • 피연산자의 값이 undefined 및 null인 경우 결과는 true입니다.
  • 자동 데이터 유형 변환이 String, Boolean, int, uint 및 Number 값을 호환되는 유형으로 변환하며, 변환된 값이 서로 동일하면 피연산자는 서로 동일한 것으로 간주됩니다.
  • 피연산자 중 하나가 간단한 내용(hasSimpleContent() == true)을 가진 XML 유형이고, toString() 메서드를 사용하여 두 피연산자를 문자열로 변환한 후 결과 문자열이 일치하는 경우.
  • 피연산자 중 하나의 유형이 XMLList이고 다음 조건 중 하나가 true인 경우:
    • XMLList 객체의 length 속성이 0이고 다른 객체가 undefined입니다.
    • XMLList 객체의 length 속성이 1이고 XMLList 객체의 한 요소가 다른 피연산자와 일치합니다.

피연산자
expression1:Object — 숫자, 문자열, 부울 값, 변수, 객체, 배열 또는 표현식입니다.
expression2:Object — 숫자, 문자열, 부울 값, 변수, 객체, 배열 또는 표현식입니다.

결과
Boolean — 표현식이 동일하면 true이고, 그렇지 않으면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 항등(==) 연산자를 if 문과 함께 사용합니다.
var a:String = "David"
var b:String = "David"; 
if (a == b) { 
    trace("David is David"); 
} 
다음 예제에서는 값을 기준으로 비교할 때 항등 연산자가 자동 유형 변환을 수행하는 방법을 보여 줍니다. 문자열 값은 숫자로 변환됩니다.
var a:Number = 5; 
var b:String = "5"; 
trace(a == b); // true
부울 값은 숫자로 변환됩니다. 여기서 true는 1로 변환되고, false는 0으로 변환됩니다.
var c:Number = 1; 
var d:Boolean = true; 
trace(c == d); // true
var e:Number = 0; 
var f:Boolean = false; 
trace(e == f); // true
하지만 문자열 값이 부울 값으로는 변환되지 않으므로 다음 코드는 false를 반환합니다.
var g:String = "true";
var h:Boolean = true;
trace(g == h); // false
다음 예제에서는 참조를 기준으로 하는 비교를 보여 줍니다. 첫 번째 예제에서는 길이와 요소가 같은 두 배열을 비교합니다. 항등 연산자는 이러한 두 배열에 대해 false를 반환합니다. 두 배열이 서로 같은 것처럼 보이지만 참조를 기준으로 비교할 때는 firstArray 및 secondArray가 동일한 배열을 참조해야 합니다. 두 번째 예제에서는 thirdArray 변수가 만들어지고, 이 변수는 firstArray와 같은 배열을 가리킵니다. 두 배열이 서로 동일한 배열을 참조하기 때문에 항등 연산자는 이들 두 배열에 대해 true를 반환합니다.
var firstArray:Array = new Array("one", "two", "three"); 
var secondArray:Array = new Array("one", "two", "three"); 
trace(firstArray == secondArray); // false 
/* Arrays are only considered equal 
if the variables refer to the same array. */
var thirdArray:Array = firstArray; 
trace(firstArray == thirdArray); // true 

참고 사항

> greater than 연산자  
구문
expression1 > expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

두 표현식을 비교하여 expression1이 expression2보다 큰지 여부를 확인합니다. 큰 경우 결과는 true입니다. expression1이 expression2보다 작거나 같은 경우 결과는 false입니다.

피연산자의 유형이 모두 문자열인 경우 피연산자는 알파벳 순서로 비교되며, 소문자보다 대문자가 앞에 옵니다. 그렇지 않은 경우에는 피연산자가 숫자로 변환된 후 비교됩니다.

피연산자
expression1:Object — 문자열, 정수 또는 부동 소수점 숫자입니다.
expression2:Object — 문자열, 정수 또는 부동 소수점 숫자입니다.

결과
Boolean — expression1이 expression2보다 크면 true이고, 그렇지 않으면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 문자열이 알파벳 순서로 비교되고, 소문자보다 대문자가 앞에 온다는 것을 보여 줍니다.
var a:String = "first";
var b:String = "First";
trace(a > b); // true
다음 예제에서는 문자열 및 부울 값을 숫자로 변환하는 방법을 보여 줍니다.
var c:Number = 5;
var d:String = "4";
trace(c > d); // true

var e: Number = 2;
var f:Boolean = true;
trace(e > f); // true

>= greater than or equal to 연산자  
구문
expression1 >= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

두 표현식을 비교하여 expression1이 expression2(true)보다 크거나 같은지, 아니면 expression1이 expression2(false)보다 작은지를 확인합니다.

피연산자
expression1:Object — 문자열, 정수 또는 부동 소수점 숫자입니다.
expression2:Object — 문자열, 정수 또는 부동 소수점 숫자입니다.

결과
Boolean — expression1이 expression2보다 크거나 같으면 true이고, 그렇지 않으면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 보다 크거나 같음 연산자(>=)를 사용하여 현재 시간이 12보다 크거나 같은지를 확인합니다.
if (new Date().getHours() >= 12) { 
    trace("good afternoon"); 
} else { 
    trace("good morning"); 
}

참고 사항

in 연산자  
구문
expression1 in expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

속성이 특정 객체에 속하는지 여부를 평가합니다. in 연산자를 사용하려면 속성 이름을 첫 번째 피연산자로 지정하고, 객체를 두 번째 피연산자로 지정합니다. 지정한 객체에 그러한 속성이 들어 있으면 결과가 true이고, 그렇지 않으면 false입니다.

지정된 객체가 Array 객체이면 in 연산자를 사용해서 특정 인덱스 번호가 유효한지 여부를 확인할 수 있습니다. 정수를 첫 번째 피연산자로 전달한 경우 색인이 유효한 색인 번호 범위 내에 있으면 결과가 true이고, 그렇지 않으면false입니다.

결과
Boolean — expression1이 expression2가 나타내는 객체의 속성이면 true이고, 그렇지 않으면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 in 연산자를 사용하여 PI는 Math 객체의 속성이고 myProperty는 그렇지 않음을 보여 줍니다.
trace("PI" in Math);         // true
trace("myProperty" in Math); // false

다음 예제에서는 in 연산자를 사용하여 myArray 객체에서 숫자 0, 1 및 2는 유효한 색인 번호이지만 숫자 3은 유효하지 않음을 보여 줍니다.

public var myArray:Array = ["zero", "one", "two"];
trace(0 in myArray); // true
trace(1 in myArray); // true
trace(2 in myArray); // true
trace(3 in myArray); // false

참고 사항

++ increment 연산자  
구문
++expression
 expression++

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

표현식에 1을 더합니다. 표현식은 변수, 배열 요소 또는 객체의 속성일 수 있습니다. 선행 증가 형식의 연산자(++expression)는 expression에 1을 더한 후 그 결과를 반환합니다. 후행 증가 형식의 연산자(expression++)는expression에서 1을 더한 후 expression의 초기값(더하기 이전의 값)을 반환합니다.

피연산자
expression:Number — 숫자 또는 숫자로 평가되는 변수입니다.

결과
Number — 증가의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 while 루프 내에서 ++를 선행 증가 연산자로 사용하여 배열에 추가되는 값이 증가된 값임을 보여 줍니다.
var preInc:Array = new Array(); 
var i:int = 0; 
while (i < 10) { 
    preInc.push(++i); 
} 
trace(preInc); // 1,2,3,4,5,6,7,8,9,10 
다음 예제에서는 while 루프 내에서 ++를 후행 증가 연산자로 사용하여 배열에 추가되는 값이 초기값임을 보여 줍니다.
 
var postInc:Array = new Array(); 
var i:int = 0; 
while (i < 10) { 
   postInc.push(i++); 
} 
trace(postInc); // 0,1,2,3,4,5,6,7,8,9 
다음 예제에서는 ++가 후행 증가 연산자로 사용되어 while 루프를 다섯 번 실행합니다.
var i:int = 0; 
while (i++ < 5) { 
    trace("this is execution " + i); 
} 
/* output: 
   this is execution 1 
   this is execution 2 
   this is execution 3 
   this is execution 4 
   this is execution 5 
*/

참고 사항

!= inequality 연산자  
구문
expression1 != expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

항등(==) 연산자의 정반대 상황을 테스트합니다. expression1이 expression2와 같으면 결과는 false입니다. 항등(==) 연산자와 마찬가지로 동일함에 대한 정의는 비교되는 데이터의 유형에 따라 다릅니다.

두 피연산자의 데이터 유형이 일치할 경우 동일함에 대한 정의는 피연산자의 데이터 유형에 따라 다릅니다.

  • int, uint 및 Boolean 유형의 값이 동일한 값을 갖고 있는 경우 서로 동일한 것으로 간주됩니다.
  • NaN 이외의 일치하는 값을 갖고 있는 숫자의 경우 서로 동일한 것으로 간주됩니다.
  • 두 피연산자의 값이 null 또는 undefined인 경우 서로 동일한 것으로 간주됩니다.
  • 문자열 표현식은 문자가 동일하고 문자 수도 같은 경우 서로 동일한 것으로 간주됩니다.
  • XML 객체의 경우:
    • 텍스트 또는 속성 노드인 피연산자와 간단한 내용을 갖고 있는 피연산자가 있는 경우 toString() 메서드를 사용하여 두 피연산자를 문자열로 변환한 다음, 결과 문자열이 일치하면 두 피연산자는 동일한 것으로 간주됩니다.
    • 그렇지 않은 경우에는 두 객체의 정규화된 이름, 속성 및 자식 속성이 일치하는 경우에만 서로 동일한 것으로 간주됩니다.
  • XMLList 객체는 속성의 수가 같고 속성의 순서 및 값이 모두 일치하는 경우 서로 동일한 것으로 간주됩니다.
  • Namespace 객체의 경우, 두 객체의 uri 속성이 일치하면 값이 동일한 것으로 간주됩니다.
  • QName 객체의 경우, 두 객체의 uri 속성 및 localName 속성이 모두 일치하면 값이 동일한 것으로 간주됩니다.
  • 객체, 배열 및 함수를 나타내는 변수는 참조를 기준으로 비교됩니다. 이러한 두 변수는 동일한 객체, 배열 또는 함수를 참조하는 경우 서로 동일한 것으로 간주됩니다. 별도의 두 배열은 포함된 요소의 수가 같더라도 동일한 것으로 간주되지 않습니다.
피연산자의 데이터 유형이 일치하지 않는 경우 다음과 같은 상황을 제외하고 비항등 연산자(!=)는 true를 반환합니다.
  • 피연산자의 값이 undefined 및 null인 경우 결과는 true입니다.
  • 자동 데이터 유형 변환이 String, Boolean, int, uint 및 Number 값을 호환되는 유형으로 변환하며, 변환된 값이 서로 동일하면 피연산자는 서로 동일한 것으로 간주됩니다.
  • 피연산자 중 하나가 간단한 내용(hasSimpleContent() == true)을 가진 XML 유형이고, toString() 메서드를 사용하여 두 피연산자를 문자열로 변환한 후 결과 문자열이 일치하는 경우.
  • 피연산자 중 하나의 유형이 XMLList이고 다음 조건 중 하나가 true인 경우:
    • XMLList 객체의 length 속성이 0이고 다른 객체가 undefined입니다.
    • XMLList 객체의 length 속성이 1이고 XMLList 객체의 한 요소가 다른 피연산자와 일치합니다.

피연산자
expression1:Object — 숫자, 문자열, 부울 값, 변수, 객체, 배열 또는 함수입니다.
expression2:Object — 숫자, 문자열, 부울 값, 변수, 객체, 배열 또는 함수입니다.

결과
Boolean — 표현식이 동일하지 않으면 true이고, 그렇지 않으면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 비항등(!=) 연산자의 결과를 보여 줍니다.
trace(5 != 8); // true 
trace(5 != 5); // false 
다음 예제에서는 if 문에서 비항등(!=) 연산자를 사용하는 방법을 보여 줍니다.
var a:String = "David";
var b:String = "Fool";
if (a != b) { 
    trace("David is not a fool"); 
}
다음 예제에서는 참조를 기준으로 두 함수를 비교하는 경우를 보여 줍니다.
var a:Function = function() { trace("foo"); }; 
var b:Function = function() { trace("foo"); }; 
a(); // foo 
b(); // foo 
trace(a != b); // true 
a = b; 
a(); // foo 
b(); // foo 
trace(a != b); // false
다음 예제에서는 참조를 기준으로 두 배열을 비교하는 경우를 보여 줍니다.
var a:Array = [ 1, 2, 3 ]; 
var b:Array = [ 1, 2, 3 ]; 
trace(a);      // 1,2,3 
trace(b);      // 1,2,3 
trace(a != b); // true 
a = b; 
trace(a);      // 1,2,3 
trace(b);      // 1,2,3 
trace(a != b); // false

참고 사항

instanceof 연산자  
구문
expression instanceof function

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

표현식의 프로토타입 체인에 function에 대한 프로토타입 객체가 포함되어 있는지 여부를 평가합니다. instanceof 연산자는 ECMAScript 버전 3과의 하위 호환성을 위해 포함되었으며, 클래스 대신 생성자 함수를 통한 프로토타입 기반 상속을 사용하려는 고급 프로그래머에게 유용할 수 있습니다.

객체가 특정 데이터 유형의 멤버인지 확인하려면 is 연산자를 사용합니다.

클래스의 프로토타입 체인에는 수퍼 클래스가 모두 포함되므로 instanceof 연산자를 클래스와 함께 사용하면 is 연산자와 유사하게 작동합니다. 그러나 인터페이스는 프로토타입 체인에 포함되지 않으므로 인터페이스와 함께instanceof 연산자를 사용하면 항상 false가 반환됩니다. 반면에 지정된 인터페이스를 구현한 클래스에 속하는 객체와 함께 is 연산자를 사용하면 true가 반환됩니다.

참고: ActionScript is 연산자는 Java instanceof 연산자와 같습니다.

피연산자
expression:Object — 평가할 프로토타입 체인이 들어 있는 객체입니다.
function:Object — 함수 객체(또는 클래스)입니다.

결과
Boolean — expression의 프로토타입 체인에 function에 대한 프로토타입 객체가 들어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

예제 
예제 사용 방법 
다음 예제에서는 mySprite 라는 Sprite 클래스 인스턴스를 만들고 instanceof 연산자를 사용하여 mySprite의 프로토타입 체인에 Sprite 및 DisplayObject 클래스의 프로토타입 객체가 들어 있는지 테스트합니다. Sprite 및 DisplayObject의 프로토타입 객체가 mySprite의 프로토타입 체인상에 있으므로 Sprite 클래스 및 DisplayObject 클래스와 함께 사용하는 경우 true가 반환됩니다.
var mySprite:Sprite = new Sprite();
trace(mySprite instanceof Sprite);        // true
trace(mySprite instanceof DisplayObject); // true
다음 예제에서는 IBitmapDrawable 인터페이스를 사용하여 instanceof 연산자가 인터페이스와 함께 작동하지 않음을 보여 줍니다. Sprite 클래스의 수퍼 클래스인 DisplayObject 클래스에서 IBitmapDrawable 인터페이스를 구현하므로 is 연산자에서 true를 반환합니다.
var mySprite:Sprite = new Sprite();
trace(mySprite instanceof IBitmapDrawable); // false
trace(mySprite is IBitmapDrawable);         // true

참고 사항

is 연산자  
구문
expression1 is expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

객체가 특정 데이터 유형, 클래스 또는 인터페이스와 호환되는지 여부를 평가합니다. 유형 비교에는 instanceof 연산자 대신 is 연산자를 사용합니다. 또한 is 연산자를 사용하여 객체가 인터페이스를 구현하는지 여부를 확인할 수 있습니다.

결과
Boolean — expression1이 expression2에 지정된 데이터 유형, 클래스 또는 인터페이스와 호환되면 true이고, 그렇지 않으면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 mySprite라는 Sprite 클래스 인스턴스를 만들고, is 연산자를 사용하여 mySprite가 Sprite 및 DisplayObject 클래스의 인스턴스인지 여부와 IEventDispatcher 인터페이스를 구현했는지 여부를 테스트합니다.
import flash.display.*;
import flash.events.IEventDispatcher;

var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite);           // true
trace(mySprite is DisplayObject);    // true
trace(mySprite is IEventDispatcher); // true

참고 사항

< less than 연산자  
구문
expression1 < expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

두 표현식을 비교하여 expression1이 expression2보다 작은지 여부를 확인합니다. 작은 경우 결과는 true입니다. expression1이 expression2보다 크거나 같은 경우 결과는 false입니다.

피연산자의 유형이 모두 문자열인 경우 피연산자는 알파벳 순서로 비교되며, 소문자보다 대문자가 앞에 옵니다. 그렇지 않은 경우에는 피연산자가 숫자로 변환된 후 비교됩니다.

피연산자
expression1:Object — 문자열, 정수 또는 부동 소수점 숫자입니다.
expression2:Object — 문자열, 정수 또는 부동 소수점 숫자입니다.

결과
Boolean — expression1이 expression2보다 작으면 true이고, 그렇지 않으면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 숫자 비교 및 문자열 비교에 대한 true 및 false 결과를 보여 줍니다.
trace(5 < 10); // true 
trace(2 < 2);            // false 
trace(10 < 3);           // false 
trace("Allen" < "Jack"); // true 
trace("Jack" < "Allen"); // false 
trace("11" < "3");       // true 
trace("11" < 3);         // false (numeric comparison) 
trace("C" < "abc");      // true 
trace("A" < "a");        // true 

<= less than or equal to 연산자  
구문
expression1 <= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

두 표현식을 비교하여 expression1이 expression2보다 작거나 같은지를 확인합니다. 작거나 같은 경우 결과는 true입니다. expression1이 expression2보다 크면 결과는 false입니다.

피연산자의 유형이 모두 문자열인 경우 피연산자는 알파벳 순서로 비교되며, 소문자보다 대문자가 앞에 옵니다. 그렇지 않은 경우에는 피연산자가 숫자로 변환된 후 비교됩니다.

피연산자
expression1:Object — 문자열, 정수 또는 부동 소수점 숫자입니다.
expression2:Object — 문자열, 정수 또는 부동 소수점 숫자입니다.

결과
Boolean — expression1이 expression2보다 작거나 같으면 true이고, 그렇지 않으면 false입니다.

예제 
예제 사용 방법 
다음 예제에서는 숫자 비교 및 문자열 비교에 대한 true 및 false 결과를 보여 줍니다.
trace(5 <= 10); // true 
trace(2 <= 2);            // true 
trace(10 <= 3);           // false 
trace("Allen" <= "Jack"); // true 
trace("Jack" <= "Allen"); // false 
trace("11" <= "3");       // true 
trace("11" <= 3);         // false (numeric comparison) 
trace("C" <= "abc");      // true 
trace("A" <= "a");        // true 

// line comment delimiter 연산자  
구문
// comment

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

스크립트 주석의 시작을 나타냅니다. 주석 기호(//)와 행의 끝 문자 사이에 있는 문자는 주석으로 해석되며 무시됩니다. 이 기호는 한 줄 주석에 사용합니다. 연속되는 여러 행을 주석 처리하려면 /* 및 */ 기호를 사용합니다.

피연산자
comment:* — 모든 문자입니다.

예제 
예제 사용 방법 
다음은 한 줄 주석을 보여 주는 예제입니다.
// Any text following a line comment delimiter is ignored during compilation

참고 사항

&& logical AND 연산자  
구문
expression1 && expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

false이거나 false로 변환될 수 있으면 expression1을 반환하고, 그렇지 않으면 expression2를 반환합니다. 0, NaNnull 및 undefined 등이 false로 변환될 수 있는 값입니다. 함수 호출을 expression2로 사용하는 경우expression1이 false로 평가되면 함수가 호출되지 않습니다.

다음 표와 같이 두 피연산자의 유형이 모두 부울이면 두 피연산자가 모두 true인 경우에만 결과가 true가 됩니다.

Expression 다음과 같이 평가합니다.
true && true true
true && false false
false && false false
false && true false

피연산자
expression1:* — 모든 유형의 값 또는 표현식입니다.
expression2:* — 모든 유형의 표현식 값입니다.

결과
* — 두 피연산자의 유형이 모두 부울이면 부울 값입니다. 그렇지 않으면 결과는 표현식 중 하나의 값입니다.

예제 
예제 사용 방법 
다음은 플레이어가 게임에서 이겼는지 여부를 확인하는 테스트를 수행하기 위해 논리 AND 연산자(&&)를 사용하는 예제입니다. 게임하는 동안 플레이어 차례가 되거나 플레이어가 점수를 올리는 경우 turns 변수 및 score 변수가 업데이트됩니다. 플레이어가 최대 3번의 기회를 사용하는 동안 75점 이상을 득점하면 "You Win the Game!"이라는 메시지가 표시됩니다.
var turns:Number = 2; 
var score:Number = 77; 
if ((turns <= 3) && (score >= 75)) { 
    trace("You Win the Game!"); 
} else { 
    trace("Try Again!"); 
} 

참고 사항

&&= logical AND assignment 연산자  
구문
expression1 &&= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 && expression2의 값을 대입합니다. 예를 들어, 다음 두 명령문은 동일합니다.

x &&= y; 
x = x && y; 

피연산자
expression1:* — 모든 유형의 값입니다.
expression2:* — 모든 유형의 값입니다.

결과
* — 두 피연산자가 Boolean 데이터 유형의 멤버이면 부울 값입니다. 그렇지 않으면 두 표현식 중 하나의 값이 결과가 됩니다.

예제 
예제 사용 방법 
다음 예제에서는 myTag라는 변수가 false로 평가되지 않으면 이 변수를 수정합니다. 이 방법은 논리 AND(&&) 연산자가 expression1이 false로 평가되면 expression1의 값을 반환하고 그렇지 않으면 expression2의 값을 반환한다는 점을 이용한 것입니다. myTag에 이미 true로 평가되는 값이 포함된 경우 myVar는 XML 태그와 비슷하게 수정됩니다. 하지만 myVar에 null""(빈 문자열) 및 undefined와 같은 false로 평가되는 값이 포함된 경우 myVar는 수정되지 않습니다.
var myVar:String = 'tag';
myVar &&= "<" + myVar + "/>";
trace (myVar); // output: <tag/>
다음 예제와 같이 if 문을 사용하여도 동일한 효과를 얻을 수 있습니다.
var myVar:String = 'tag';
if (myVar != '') {
  myVar = "<" + myVar + "/>";
}
trace (myVar); // output: <tag/>
if 문을 사용하는 것의 이점은 코드가 더 읽기 쉬워진다는 것입니다. 한편, 논리 AND 대입(&&=) 연산자를 사용하면 주어진 데이터 유형에 대한 정확한 기본 값을 지정할 필요가 없다는 이점이 있습니다.

참고 사항

! logical NOT 연산자  
구문
!expression

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

변수 또는 표현식의 부울 값을 반대로 합니다. expression이 절대 또는 변환된 값 true가 있는 변수이면 !expression 값은 false입니다. 표현식 x && y가 false로 평가되면 표현식 !(x && y)는 true로 평가됩니다.

다음 표현식은 논리 NOT 연산자(!)를 사용한 결과를 보여 줍니다.

  • !true는 false를 반환합니다.
  • !false는 true를 반환합니다.

피연산자
expression:Boolean — 부울 값으로 평가되는 표현식 또는 변수입니다.

결과
Boolean — 논리 연산의 부울 결과입니다.

예제 
예제 사용 방법 
다음 예제에서 변수 happy는 false로 설정됩니다. if 조건이 !happy 조건을 평가하고, 조건이 true이면 trace() 문에서 문자열이 출력됩니다.
var happy:Boolean = false; 
if (!happy) { 
    trace("don't worry, be happy"); // don't worry, be happy 
} 
!false가 true와 같기 때문에 trace 문이 실행됩니다.

참고 사항

|| logical OR 연산자  
구문
expression1 || expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

true이거나 true로 변환될 수 있으면 expression1을 반환하고, 그렇지 않으면 expression2를 반환합니다. 함수 호출을 expression2로 사용하는 경우 expression1이 true로 평가되면 함수가 호출되지 않습니다.

다음 표와 같이 두 피연산자의 유형이 부울인 경우 표현식 중 하나 이상이 true이면 결과는 true이고, 두 표현식 모두 false이면 결과는 false입니다.

Expression 다음과 같이 평가합니다.
true || true true
true || false true
false || false false
false || true true

피연산자
expression1:* — 모든 유형의 값입니다.
expression2:* — 모든 유형의 값입니다.

결과
* — 두 피연산자가 Boolean 데이터 유형의 멤버이면 부울 값입니다. 그렇지 않으면 두 표현식 중 하나의 값이 결과가 됩니다.

예제 
예제 사용 방법 
다음 예제에서는 if 문에서 논리 OR(||) 연산자를 사용합니다. 두 번째 표현식이 true로 평가되기 때문에 최종 결과는 true입니다.
var a:Number = 10; 
var b:Number = 250; 
var start:Boolean = false; 
if ((a > 25) || (b > 200) || (start)) { 
    trace("the logical OR test passed"); // the logical OR test passed 
} 
if 문에 포함된 조건 중의 하나가 true이기 때문에(b > 200) "논리 OR 테스트를 통과했습니다"라는 메시지가 나타납니다.

다음 예제에서는 함수 호출을 두 번째 피연산자로 사용하는 경우 예상치 않은 결과가 나타날 수 있음을 보여 줍니다. 연산자 왼쪽의 표현식이 true로 평가되면 그 결과가 바로 반환되며 오른쪽 표현식에 대한 평가는 이루어지지 않습니다. 함수 fx2()는 호출되지 않습니다.

function fx1():Boolean { 
    trace("fx1 called"); 
    return true; 
} 
function fx2():Boolean { 
    trace("fx2 called"); 
    return true; 
} 
if (fx1() || fx2()) { 
    trace("IF statement entered");
}

참고 사항

||= logical OR assignment 연산자  
구문
expression1 ||= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 || expression2의 값을 대입합니다. 예를 들어, 다음 두 명령문은 동일합니다.

x ||= y; 
x = x || y;  

피연산자
expression1:* — 모든 유형의 값입니다.
expression2:* — 모든 유형의 값입니다.

결과
* — 두 피연산자가 Boolean 데이터 유형의 멤버이면 부울 값입니다. 그렇지 않으면 두 표현식 중 하나의 값이 결과가 됩니다.

예제 
예제 사용 방법 
다음 예제에서는 이전에 선언된 myVar라는 변수에 기본값을 대입합니다. 이 방법은 논리 OR(||) 연산자가 expression1이 true로 평가되면 expression1의 값을 반환하고 그렇지 않으면 expression2의 값을 반환한다는 점을 이용한 것입니다. myVar에 이미 true로 평가되는 값이 들어 있는 경우 myVar는 변경되지 않습니다. 하지만 myVar에 null""(빈 문자열) 및 undefined와 같은 false로 평가되는 값이 포함된 경우 myVar에는 "default" 값이 대입됩니다.
myVar ||= "default";

참고 사항

% modulo 연산자  
구문
expression1 % expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1을 expression2로 나눈 나머지를 계산합니다. 피연산자 중 하나가 숫자가 아닌 경우 모듈러스(%) 연산자는 해당 피연산자를 숫자로 변환하려 합니다.

모듈러스 결과의 부호는 피제수(첫 번째 숫자)의 부호와 일치합니다. 예를 들어, -4 % 3 및 -4 % -3은 모두 -1로 평가됩니다.

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다. 숫자 문자만 들어 있는 문자열은 숫자로 평가됩니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다. 숫자 문자만 들어 있는 문자열은 숫자로 평가됩니다.

결과
Number — 산술 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 모듈러스(%) 연산자를 사용합니다.
trace(12 % 5);    // 2 
trace(4.3 % 2.1); // 0.0999999999999996 
trace(4 % 4);     // 0 
첫 번째 추적 결과 12/5 또는 2.4가 아닌 2가 반환됩니다. 모듈러스(%) 연산자는 나머지 값만 반환하기 때문입니다. 두 번째 trace에서는 이진 계산 작업의 부동 소수점 정확성 제한 때문에 예상 값인 0.1 대신 0.0999999999999996이 반환됩니다.

참고 사항

%= modulo assignment 연산자  
구문
expression1 %= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 % expression2의 값을 대입합니다. 다음 두 명령문은 동일합니다.

x %= y; 
x = x % y; 

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다.

결과
Number — 산술 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 값 4을 변수 a에 대입합니다.
var a:Number = 14; 
var b:Number = 5; 
a %= b;
trace(a); // 4 

참고 사항

* multiplication 연산자  
구문
expression1 * expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

두 개의 숫자 표현식을 곱합니다. 두 표현식이 모두 정수인 경우에는 곱한 값도 정수이고 두 표현식 중 하나라도 부동 소수점 숫자인 경우에는 곱한 값도 부동 소수점 숫자입니다.

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다.

결과
Number — 정수 또는 부동 소수점 숫자입니다.

예제 
예제 사용 방법 
다음 명령문은 정수 2와 3을 곱해서 정수 6을 결과로 얻습니다.
trace(2*3); // 6 
이 명령문은 부동 소수점 숫자 2.0과 3.1416을 곱해서 부동 소수점 숫자 6.2832를 결과로 얻습니다.
trace(2.0 * 3.1416); // 6.2832 

참고 사항

*= multiplication assignment 연산자  
구문
expression1 *= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 * expression2의 값을 대입합니다. 예를 들어, 다음 두 표현식은 동일합니다.

x *= y 
x = x * y 

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다.

결과
Number — expression1 * expression2의 값입니다. 표현식을 숫자 값으로 변환할 수 없는 경우 NaN(숫자가 아님)을 반환합니다.

예제 
예제 사용 방법 
다음 예제에서는 값 50를 변수 a에 대입합니다.
var a:Number = 5; 
var b:Number = 10; 
trace(a *= b); // 50 
다음 예제의 두 번째 행과 세 번째 행에서는 항등 부호 오른쪽의 표현식을 계산한 후 그 결과를 c와 d에 대입합니다.
var i:Number = 5; 
var c:Number = 4 - 6; 
var d:Number = i + 2; 
trace(c *= d); // -14 

참고 사항

:: name qualifier 연산자  
구문
namespace::property
namespace::method()
namespace::xmlObject.property
namespace::xmlObject.@attribute

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

속성, 메서드, XML 속성 또는 XML 특성의 네임스페이스를 식별합니다.

피연산자
namespace:Object — 식별하는 네임스페이스입니다.
propertyName:Object — 식별할 속성, 메서드, XML 속성 또는 XML 특성입니다.

예제 
예제 사용 방법 
다음 예제에서는 :: 연산자를 사용하여 두 개의 다른 네임스페이스에서 같은 이름을 가진 두 개의 메서드를 식별합니다.
public class NamespaceExample extends Sprite {
    public namespace French;
    public namespace Hawaiian;
    public function NamespaceExample() {
        trace(Hawaiian::hello()); // aloha
        trace(French::hello()); // bonjour
    }
    Hawaiian function hello():String {
        return "aloha";
    }

    French function hello():String { 
        return "bonjour";
    }
}
다음 예제에서는 :: 연산자를 사용하여 지정된 네임스페이스를 갖고 있는 XML 속성을 식별합니다.
var soap:Namespace = new Namespace("http://schemas.xmlsoap.org/wsdl/soap/");
var w:Namespace = new Namespace("http://weather.example.org/forecast");
var myXML:XML = 
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> 
     <soap:Body>
      <w:forecast xmlns:w="http://weather.example.org/forecast">
       <w:city>Quito</w:city>
       <w:country>Ecuador</w:country>
       <date>2006-01-14</date>
      </w:forecast>
      </soap:Body>
    </soap:Envelope>;
    
trace(myXML.soap::Body.w::forecast.w::city); // Quito

참고 사항

new 연산자  
구문
new constructor(parameters)

Player 버전 :  Flash Player 5

클래스 인스턴스를 인스턴스화합니다. new 연산자를 클래스 또는 Class 유형의 변수와 함께 사용해서 클래스 인스턴스를 만들 수 있습니다. 일반적으로 new 연산자는 클래스 인스턴스를 만들기 위해 클래스 객체와 함께 사용됩니다. 예를 들어, new Sprite() 문은 Sprite 클래스 인스턴스를 만듭니다.

또한 new 연산자를 사용하여 SWF 파일로 컴파일된 이미지, 사운드 또는 글꼴과 같은 외부 객체인 포함된 에셋과 클래스를 연결할 수 있습니다. 포함된 각 에셋은 포함된 고유 에셋 클래스로 표현됩니다. 포함된 에셋에 액세스하려면 new 연산자를 사용하여 연결된 클래스를 인스턴스화해야 합니다. 그 후에 포함된 에셋 클래스의 해당 메서드 및 속성을 호출하여 포함된 에셋을 조작할 수 있습니다.

클래스를 정의할 때 class 키워드보다 Function 객체를 자주 사용하는 경우에는 new 연산자를 사용하여 생성자 함수 기반의 객체를 만들 수 있습니다. 생성자 함수와 클래스의 생성자 메서드를 혼동하지 마십시오. 생성자 함수는function 키워드를 사용하여 정의된 Function 객체이지만 클래스 정의에 속하지는 않습니다. 생성자 함수를 사용하여 객체를 만들 때는 클래스 상속 대신 프로토타입 상속을 사용해야 합니다.

피연산자
constructor:* — 클래스, 함수 또는 Class 유형의 값을 갖고 있는 변수입니다.
parameters:* — 쉼표로 구분되는 하나 이상의 매개 변수입니다.

예제 
예제 사용 방법 
다음 예제에서는 Book 클래스를 만든 후 new 연산자를 사용하여 객체 book1과 book2를 만듭니다.
class Book {
  var bName:String;
  var bPrice:Number;
  
  public function Book(nameParam:String, priceParam:Number){
    bName = nameParam;
    bPrice = priceParam;
  }
}

var book1:Book = new Book("Confederacy of Dunces", 19.95);
var book2:Book = new Book("The Floating Opera", 10.95);
trace(book1); // [object Book]
다음 예제에서는 new 연산자를 사용하여 18개의 요소를 갖는 Array 클래스의 인스턴스를 만듭니다.
var golfCourse:Array = new Array(18);

참고 사항

{} object initializer 연산자  
구문
object = {name1 : value1, name2 : value2,... nameN : valueN}

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

지정된 name 및 value 속성 쌍으로 새 객체를 만들거나 초기화합니다. 이 연산자를 사용하면 new Object 구문을 사용하고 대입 연산자를 사용하여 속성 쌍을 채우는 것과 동일한 결과가 됩니다. 새로 만들어진 객체의 프로토타입은 일반적으로 Object 객체로 명명됩니다.

이 연산자는 흐름 제어 명령문(forwhileifelseswitch) 및 함수와 연관된 연속 코드 블록을 표시하는 데에도 사용됩니다.

피연산자
object:Object — 작성할 객체입니다.
name1,2,...N:Object — 속성의 이름입니다.
value1,2,...N:Object — 각 name 속성에 해당하는 값입니다.

결과
Object — Object 객체입니다.

예제 
예제 사용 방법 
다음 코드의 첫 번째 행에서는 객체 이니셜라이저 연산자({})를 사용하여 빈 객체를 만들고 두 번째 행에서는 생성자 함수를 사용하여 새 객체를 만듭니다.
var object:Object = {}; 
var object:Object = new Object(); 
다음 예제에서는 account 객체를 만들고 nameaddresscitystatezip 및 balance 속성을 제공된 값으로 초기화합니다.
var account:Object = {name:"Adobe Systems, Inc.", address:"601 Townsend Street", city:"San Francisco", state:"California", zip:"94103", balance:"1000"}; 
for (i in account) { 
    trace("account."+i+" = "+account[i]); 
} 
다음 예제에서는 배열과 객체 이니셜라이저를 서로 중첩시킬 수 있는 방법을 보여 줍니다.
var person:Object = {name:"Gina Vechio", children:["Ruby", "Chickie", "Puppa"]}; 
다음 코드에서는 이전 예제의 정보를 사용하며, 생성자 함수를 사용하여 같은 결과를 얻습니다.
var person:Object = new Object(); 
person.name = "Gina Vechio"; 
person.children = new Array(); 
person.children[0] = "Ruby"; 
person.children[1] = "Chickie"; 
person.children[2] = "Puppa"; 

참고 사항

() parentheses 연산자  
구문
(expression1[, expression2])
(expression1, expression2)
function(parameter1,..., parameterN) 

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

하나 이상의 매개 변수에 대해 그룹화 연산을 수행하고, 표현식을 연속적으로 평가하거나, 하나 이상의 매개 변수를 묶은 다음 괄호 앞의 함수에 인수로 전달합니다.

구문 1: 연산자의 실행 순서를 제어합니다. 괄호를 사용하면 일반적인 우선 순위가 무시되고 괄호 안의 표현식이 먼저 평가됩니다. 괄호가 중첩된 경우에는 가장 안쪽 괄호의 내용이 바깥쪽 괄호의 내용보다 먼저 평가됩니다.

구문 2: 쉼표로 구분된 일련의 표현식을 순서대로 평가하고 최종 표현식의 결과를 반환합니다.

구문 3: 하나 이상의 매개 변수를 묶은 다음 괄호 앞의 함수에 전달합니다.

피연산자
expression1:Object — 숫자, 문자열, 변수 또는 텍스트를 포함할 수 있는 표현식입니다.
expression2:Object — 숫자, 문자열, 변수 또는 텍스트를 포함할 수 있는 표현식입니다.
function:Function — 괄호 안의 내용에 대해 수행되는 함수입니다.
parameter1...parameterN:Object — 결과를 괄호 밖의 함수에 인수로 전달하기 전에 실행되는 일련의 매개 변수입니다.

예제 
예제 사용 방법 
구문 1: 다음 명령문은 괄호를 사용하여 표현식의 실행 순서를 제어하는 방법을 보여 줍니다.
trace((2 + 3) * (4 + 5)); // 45 
trace(2 + (3 * (4 + 5))); // 29
trace(2 + (3 * 4) + 5);   // 19
trace(2 + (3 * 4) + 5);   // 19
구문 2: 다음 예제에서는 함수 foo()를 평가하고 함수 bar()를 평가한 후 표현식 a + b의 결과를 반환합니다.
var a:Number = 1; 
var b:Number = 2; 
function foo() { 
  a += b; 
} 
function bar() { 
  b *= 10; 
} 
trace((foo(), bar(), a + b)); // 23 
구문 3: 다음 예제에서는 함수에 괄호를 사용하는 방법을 보여 줍니다.
var today:Date = new Date(); 
trace(today.getFullYear()); // outputs current year 
function traceParameter(param):void { 
  trace(param); 
} 
traceParameter(2 * 2); // 4 

참고 사항

( ) parentheses (XML) 연산자  
구문
myXML.(expression)

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

XML(E4X) XML 생성을 위한 ECMAScript의 표현식을 평가합니다. 예를 들어, myXML.(lastName == "Smith")는 lastName이라는 이름과 "Smith"라는 값을 가지고 있는 XML 요소를 식별합니다. 결과는 XMLList 객체입니다.

피연산자
myXML:* — XML 또는 XMLList 객체입니다.
expression:* — 일치하는 요소를 정의하는 표현식입니다.

결과
XMLList — 괄호로 지정된 XMLList입니다.

예제 
예제 사용 방법 
다음 예제에서는 괄호를 사용하여 요소와 속성을 식별하는 방법을 보여 줍니다.
var myXML:XML = 
    <employees>
        <employee id = "42">
            <firstName>Joe</firstName>
            <lastName>Smith</lastName>
        </employee>
        <employee id = "43">
            <firstName>Susan</firstName>
            <lastName>Jones</lastName>
        </employee>
        <employee id = "44">
            <firstName>Anne</firstName>
            <lastName>Smith</lastName>
        </employee>
    </employees>;
    
trace(myXML.employee.(lastName == "Smith").@id.toXMLString()); 
    // 42
    // 44
                
trace(myXML.employee.(Number(@id) > 42).@id.toXMLString()); 
    // 43
    // 44

참고 사항

/ RegExp delimiter 연산자  
구문
/pattern/flags

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

문자의 앞/뒤에 사용하면 해당 문자에 리터럴 값이 있으므로 이 문자를 변수, 문자열 또는 다른 ActionScript 요소가 아니라 일반 표현식(RegExp)으로 간주해야 함을 나타냅니다. 그러나 연속되는 두 개의 슬래시 문자(//)는 주석의 시작을 나타냅니다.

피연산자
pattern:String — 일반 표현식의 패턴을 정의하는 하나 이상의 문자 시퀀스입니다.
flags:String — g(global 플래그), i(ignoreCase 플래그), s (dotall 플래그), x(extended 플래그) 등의 문자가 0개 이상 포함된 문자 시퀀스입니다.

예제 
예제 사용 방법 
다음 예제에서는 슬래시 문자(/)를 사용하여 RegExp 유형의 변수 값을 설정합니다. 비교 시 대/소문자를 구분하지 않기 위해 i 플래그를 설정합니다.
var myRegExp:RegExp = /foo-\d+/i; 
trace(myRegExp.exec("ABC Foo-32 def.")); // Foo-32 

참고 사항

=== strict equality 연산자  
구문
expression1 === expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

두 표현식이 동일한지 테스트합니다. 그러나 자동 데이터 변환은 수행하지 않습니다. 데이터 유형을 포함하여 두 표현식이 동일한 경우 결과는 true입니다.

완전 항등(===) 연산자는 다음 세 가지 면에서 항등(==) 연산자와 동일합니다.

  • 숫자 및 부울 값은 값을 기준으로 비교되고 값이 동일한 경우 서로 동일한 것으로 간주됩니다.
  • 문자열 표현식은 문자가 동일하고 문자 수도 같은 경우 서로 동일한 것으로 간주됩니다.
  • 객체, 배열 및 함수를 나타내는 변수는 참조를 기준으로 비교됩니다. 이러한 두 변수는 동일한 객체, 배열 또는 함수를 참조하는 경우 서로 동일한 것으로 간주됩니다. 별도의 두 배열은 포함된 요소의 수가 같더라도 동일한 것으로 간주되지 않습니다.
완전 항등(===) 연산자는 다음 두 가지 면에서 항등(==) 연산자와 다릅니다.
  • 완전 항등 연산자는 숫자 유형(Number, int 및 uint)에 대해서만 자동 데이터 변환을 수행하는 반면 항등 연산자는 모든 원시 데이터 유형에 대해 자동 데이터 변환을 수행합니다.
  • null과 undefined를 비교할 경우 완전 항등 연산자는 false를 반환합니다.
ActionScript 3.0에서 완전 항등 연산자는 원시 값(예: var x:Number = 1)과 원시 객체(예: var x:Number = new Number(1))가 관련된 두 상황에서 ActionScript 2.0에서와는 다른 결과를 생성합니다. 이러한 결과는 ActionScript 3.0에서 원시 값과 원시 래퍼 객체를 구분하지 않기 때문에 발생합니다.

먼저 ActionScript 3.0의 경우 원시 값과 동일한 값을 갖고 있는 원시 객체를 비교하면 true가 반환되지만 이전 버전에서는 false가 반환됩니다. 이전 버전의 경우 원시 값의 데이터 유형은 Boolean, Number 또는 String인 반면 원시 객체의 데이터 유형은 Boolean, Number 또는 String이 아니라 항상 Object입니다. 다음 코드를 통해 이 차이점의 실제 효과를 확인할 수 있습니다. 이전 버전의 ActionScript에서는 피연산자의 데이터 유형이 일치하지 않기 때문에false가 반환되지만 ActionScript 3.0에서는 원시 값이 객체로 래핑되었는지 여부와 상관 없이 Boolean, Number, int, uint 또는 String 유형으로 지정되므로 true가 반환됩니다.

var num1:Number = 1;
var num2:Number = new Number(1);
trace(num1 === num2); // true in ActionScript 3.0, false in ActionScript 2.0
			
두 번째로, 같은 값을 갖고 있는 두 원시 객체를 비교할 경우 ActionScript 3.0에서는 true가 반환되지만 이전 버전에서는 false가 반환됩니다.
var num1:Number = new Number(1);
var num2:Number = new Number(1);
trace(num1 == num2);  // true in ActionScript 3.0, false in ActionScript 2.0
trace(num1 === num2); // true in ActionScript 3.0, false in ActionScript 2.0
이러한 결과는 이전 버전의 ActionScript의 경우 두 변수의 데이터 유형이 Object이므로 두 변수는 참조를 기준으로 비교되고, 결과적으로 항등 및 완전 항등 연산에 대해 false가 반환됩니다. 그러나 ActionScript 3.0의 경우 두 변수의 데이터 유형은 Number이므로 두 변수는 값을 기준으로 비교되고, 결과적으로 항등 및 완전 항등 연산자에 대해 true가 반환됩니다.

피연산자
expression1:Object — 숫자, 문자열, 부울 값, 변수, 객체, 배열 또는 함수입니다.
expression2:Object — 숫자, 문자열, 부울 값, 변수, 객체, 배열 또는 함수입니다.

결과
Boolean — 비교의 부울 결과입니다.

예제 
예제 사용 방법 
다음은 값과 데이터 유형이 일치할 경우 완전 항등(===)과 항등(==)이 동일함을 보여 주는 예제입니다.
var string1:String = "5"; 
var string2:String = "5"; 
trace(string1 == string2);  // true 
trace(string1 === string2); // true
다음 예제에서는 완전 항등 연산자가 String 데이터 유형을 Number로 변환하지 않는 반면 항등(==) 연산자는 유형 변환을 수행한다는 것을 보여 줍니다.
// The equality (==) operator converts 5 to "5", but the strict equality operator does not
var string1:String = "5"; 
var num:Number = 5; 
trace(string1 == num);  // true 
trace(string1 === num); // false 
다음 예제에서는 완전 항등 연산자가 Boolean 값을 숫자로 변환하지 않는 반면 항등 연산자는 유형 변환을 수행한다는 것을 보여 줍니다.
var num:Number = 1;
var bool:Boolean = true;
trace(num == bool);  // true 
trace(num === bool); // false
다음 예제에서는 완전 항등 연산자가 int 및 uint 데이터 유형을 변환하는 것을 보여 줍니다.
var num1:Number = 1;
var num2:int = 1;
var num3:uint = 1;
trace(num1 === num2); // true
trace(num1 === num3); // true
다음 예제에서는 완전 항등 연산자가 null과 undefined를 동일하지 않은 것으로 간주하는 반면 항등 연산자는 두 값을 동일한 것으로 간주한다는 것을 보여 줍니다.
trace(null == undefined);  // true 
trace(null === undefined); // false 

참고 사항

!== strict inequality 연산자  
구문
expression1 !== expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

완전 항등(===) 연산자의 정반대 상황을 테스트합니다. 완전 비항등 연산자는 int 및 uint 데이터 유형이 변환되지 않는다는 점을 제외하면 비항등 연산자와 동일한 동작을 수행합니다.

expression1과 expression2가 동일하고 각각의 데이터 유형이 동일한 경우 그 결과는 false입니다.

완전 비항등(!==) 연산자는 다음 세 가지 면에서 비항등(!=) 연산자와 동일합니다.

  • 숫자 및 부울 값은 값을 기준으로 비교되고 값이 동일한 경우 서로 동일한 것으로 간주됩니다.
  • 문자열 표현식은 문자가 동일하고 문자 수도 같은 경우 서로 동일한 것으로 간주됩니다.
  • 객체, 배열 및 함수를 나타내는 변수는 참조를 기준으로 비교됩니다. 이러한 두 변수는 동일한 객체, 배열 또는 함수를 참조하는 경우 서로 동일한 것으로 간주됩니다. 별도의 두 배열은 포함된 요소의 수가 같더라도 동일한 것으로 간주되지 않습니다.
완전 비항등 연산자는 다음 두 가지 면에서 비항등(!=) 연산자와 다릅니다.
  • 완전 비항등(!==) 연산자는 숫자 유형, 숫자, int 및 uint에 대해서만 자동 데이터 변환을 수행하는 반면 비항등(!=) 연산자는 모든 원시 데이터 유형에 대해 자동 데이터 변환을 수행합니다.
  • null과 undefined를 비교할 경우 완전 비항등(!==) 연산자는 true를 반환합니다.

피연산자
expression1:Object — 숫자, 문자열, 부울 값, 변수, 객체, 배열 또는 함수입니다.
expression2:Object — 숫자, 문자열, 부울 값, 변수, 객체, 배열 또는 함수입니다.

결과
Boolean — 비교의 부울 결과입니다.

예제 
예제 사용 방법 
다음 코드에 포함된 주석은 항등(==), 완전 항등(===), 완전 비항등(!==) 연산자를 사용하는 연산의 반환값을 보여 줍니다.
var s1:String = "5"; 
var s2:String = "5"; 
var s3:String = "Hello"; 
var n:Number = 5; 
var b:Boolean = true; 
trace(s1 == s2);  // true 
trace(s1 == s3);  // false 
trace(s1 == n);   // true 
trace(s1 == b);   // false 
trace(s1 === s2); // true 
trace(s1 === s3); // false 
trace(s1 === n);  // false 
trace(s1 === b);  // false 
trace(s1 !== s2); // false 
trace(s1 !== s3); // true 
trace(s1 !== n);  // true 
trace(s1 !== b);  // true 

참고 사항

" string delimiter 연산자  
구문
 "text" 

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

문자의 앞/뒤에 사용하면 해당 문자에 리터럴 값이 있으므로 이 문자를 변수, 숫자 값 또는 다른 ActionScript 요소가 아니라 문자열로 간주해야 함을 나타냅니다.

피연산자
text:String — 0개 이상 문자의 시퀀스입니다.

예제 
예제 사용 방법 
다음 예제에서는 인용 부호(")를 사용하여 yourGuess 변수의 값이 변수의 이름이 아니라 리터럴 문자열 "Prince Edward Island"임을 나타냅니다.
var yourGuess:String = "Prince Edward Island"; 
submit_btn.onRelease = function() { trace(yourGuess); }; 
// Prince Edward Island

참고 사항

- subtraction 연산자  
구문
-expression
 expression1 - expression2

Player 버전 :  Flash Player 9

부정하거나 빼는 데 사용됩니다.

구문 1: 부정에 사용되는 경우 이 연산자는 숫자 표현식의 부호를 반전시킵니다.

구문 2: 빼기에 사용되면 두 개의 숫자 표현식에서 산술 빼기를 수행하여 expression1에서 expression2를 뺍니다. 두 표현식이 모두 정수인 경우에는 빼기 결과도 정수이고 두 표현식 중 하나라도 부동 소수점 숫자인 경우에는 빼기 결과도 부동 소수점 숫자입니다.

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다.

결과
Number — 정수 또는 부동 소수점 숫자입니다.

예제 
예제 사용 방법 
구문 1: 다음 명령문은 2 + 3 표현식의 부호를 반대로 합니다.
trace(-(2 + 3)); // -5 
구문 2: 다음 명령문은 정수 5에서 정수 2를 뺍니다.
trace(5 - 2); // 3 
결과는 정수 3입니다.

다음 명령문은 부동 소수점 숫자 3.25에서 부동 소수점 숫자 1.5를 뺍니다.

trace(3.25 - 1.5); // 1.75 
결과는 부동 소수점 숫자 1.75입니다.

참고 사항

-= subtraction assignment 연산자  
구문
expression1 -= expression2

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression1에 expression1 - expression2의 값을 대입합니다. 예를 들어, 다음 두 명령문은 동일합니다.

x -= y ;
x = x - y;

문자열 표현식은 숫자로 변환되어야 하며, 그렇지 않으면 결과는 NaN(숫자가 아님)이 됩니다.

피연산자
expression1:Number — 숫자 또는 숫자로 평가되는 표현식입니다.
expression2:Number — 숫자 또는 숫자로 평가되는 표현식입니다.

결과
Number — 산술 연산의 결과입니다.

예제 
예제 사용 방법 
다음 예제에서는 빼기 대입(-=) 연산자를 사용하여 5에서 10을 빼고 그 결과를 변수 x에 대입합니다.
var x:Number = 5; 
var y:Number = 10; 
x -= y; 
trace(x); // -5 
다음 예제에서는 문자열을 숫자로 변환하는 방법을 보여 줍니다.
var x:String = "5"; 
var y:String = "10"; 
x -= y; 
trace(x); // -5 

참고 사항

: type 연산자  
구문
[modifiers] var variableName:type
function functionName():type { ... }
function functionName(parameter1:type, ..., parameterN:type) [:type]{ ... } 

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

데이터 유형 대입에 사용되는 이 연산자는 변수 유형, 함수 반환 유형 또는 함수 매개 변수 유형을 지정합니다. 이 연산자는 변수를 선언하거나 대입하는 데 사용되는 경우 해당 변수의 유형을 지정하고 함수를 선언하거나 정의하는 데 사용될 경우에는 해당 함수의 반환 유형을 지정합니다. 또한 함수 정의에서 함수 매개 변수와 함께 사용될 경우에는 해당 매개 변수에 필요한 변수 유형을 지정합니다.

유형 검사는 런타임에 항상 발생합니다. 그러나 컴파일러가 Strict 모드로 설정된 경우에는 컴파일 타임에 모든 유형이 검사되며, 일치하지 않는 유형이 있으면 오류가 생성됩니다. 대입 연산, 함수 호출 및 도트(.) 연산자를 사용하는 클래스 멤버의 참조를 해제하는 동안 유형 불일치가 발생할 수 있습니다.

사용할 수 있는 유형은 모든 기본 객체 유형, 사용자가 정의하는 클래스와 인터페이스 및 void입니다. 인식되는 기본 유형은 Boolean, Number, int, uint 및 String입니다. 모든 내장 클래스도 기본 유형으로 지원됩니다.

데이터 유형을 대입하지 않은 경우 변수, 함수 반환값 또는 함수 매개 변수는 유형이 지정되지 않은 것으로 간주되며, 이러한 값은 어느 데이터 유형이나 될 수 있습니다. 유형이 지정되지 않은 값을 명확하게 사용하려는 경우 별표(*) 문자를 유형 약어로 사용할 수 있습니다. 별표 문자를 유형 약어로 사용하면 변수, 함수 반환 유형 또는 함수 매개 변수의 유형이 지정되지 않은 채로 유지됩니다.

피연산자
variableName:* — 변수의 식별자입니다.
type:* — 고유 데이터 유형, 사용자 정의 클래스 이름 또는 인터페이스 이름입니다.
functionName:Function — 함수의 식별자입니다.
parameter:* — 함수 매개 변수의 식별자입니다.

예제 
예제 사용 방법 
구문 1: 다음 예제에서는 String 유형의 userName이라는 공용 변수를 선언하고 빈 문자열을 대입합니다.
var userName:String = ""; 
구문 2: 다음 예제에서는 반환 유형을 int로 지정한 randomInt() 함수를 정의하여 함수의 반환 유형을 지정하는 방법을 보여 줍니다.
function randomInt(integer:int):int { 
    return Math.round(Math.random()*integer); 
} 
trace(randomInt(8)); 
구문 3: 다음 예제에서는 Number 유형의 val 매개 변수를 사용하는 squareRoot() 함수를 정의하고 val의 제곱근 및 Number 유형을 반환합니다.
function squareRoot(val:Number):Number { 
    return Math.sqrt(val); 
} 
trace(squareRoot(121)); 

참고 사항

typeof 연산자  
구문
typeof expression

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

expression을 평가하고 표현식의 데이터 유형을 지정하는 문자열을 반환합니다. 결과는 booleanfunctionnumberobjectstring 및 xml이라는 6개의 문자열 값으로 제한됩니다. 이 연산자를 사용자 정의 클래스의 인스턴스에 적용하면 결과는 문자열 object입니다. typeof 연산자는 이전 버전과의 호환성을 위해 포함되었습니다. 유형 호환성을 확인하려면 is 연산자를 사용합니다.

피연산자
expression:Object — 평가할 객체입니다.

결과
String — expression 유형의 문자열 표현입니다. 다음 표에서는 각 표현식의 유형에 대한 typeof 연산자의 결과를 보여 줍니다.

표현식 유형 결과
Array object
Boolean boolean
Function function
int number
Number number
Object object
문자열 연산자 string
uint number
XML 연산자 xml
XMLList xml

예제 
예제 사용 방법 
다음 예제에서는 다양한 객체 및 값에 typeof를 사용한 결과를 보여 줍니다.
trace(typeof Array); // object
trace(typeof Date);  // object
trace(typeof 3);     // number
다음 예제에서는 ActionScript 3.0에서 리터럴 값을 대입하거나 new 연산자를 사용하여 객체를 만들거나 상관 없이 원시 객체의 데이터 유형이 같다는 것을 보여 줍니다. 이와는 달리 이전 버전의 ActionScript에서는 typeof 연산자가 변수 b에 대해 object를 반환합니다.
var a:String = "sample";
var b:String = new String("sample");
trace(typeof a); // string
trace(typeof b); // string 

참고 사항

void 연산자  
구문
void expression

Player 버전 :  Flash Player 9

표현식을 평가한 후 그 값을 버리고 undefined를 반환합니다. void 연산자는 == 연산자를 사용한 비교를 통해 정의되지 않은 값을 테스트할 때 자주 사용됩니다.

피연산자
expression:Object — 평가할 표현식입니다.

결과
* — undefined 값입니다.

참고 사항

< > XML literal tag delimiter 연산자  
구문
 myXML= <{tagName} {attributeName} = {attributeValue}>{content}</{tagName}>

언어 버전 :  ActionScript 3.0
Player 버전 :  Flash Player 9

XML 리터럴의 XML 태그를 정의합니다. 슬래시(/)를 사용하여 닫는 태그를 정의합니다.

피연산자
myXML:* — XML 또는 XMLList 객체입니다.
tagName:* — XML 태그 이름으로 평가되는 표현식입니다.
attributeName:* — XML 속성 이름으로 평가되는 표현식입니다.
attributeValue:* — XML 속성 값으로 평가되는 표현식입니다.
content:* — XML 태그의 내용으로 평가되는 표현식입니다.

예제 
예제 사용 방법 
다음 예제에서는 XML 리터럴을 정의할 때 < 및 > 연산자를 사용하는 방법을 보여 줍니다.
var x:XML = <item id= "324">cola</item>; 

참고 사항


Posted by chacolina
Study/Actionscript 3.02010. 6. 17. 22:35

http://blog.zupko.info/?p=129


GREAT WHITE, MEET EFFECTS


demo1.jpg

So, after getting asked for the hundredth time the other day when I was going to integrate some of the features of the Effects Branch to Great White - I decided it was about time to do so. Things are settling in with my new job, and I've finished up my other obligations as well - so I put in the the time.

And now... They have been merged!!!

There are A LOT of changes though: creating layers, controlling layers, creating dynamic layers, sorting layers... its all different. Fortunately, I think for the better. I've comped up a set of VERY simple demos (all in one class) and will go over some of the new functionality here - just for you. Keep in mind this is still beta - so PLEASE report any bugs to me here or on the list.

--ViewportLayer has now replaced RenderLayer

Thats right - sorry. Forgot everything you ever knew about RenderLayers and RenderLayer syntax. Now - instead of layers being controlled by the objects - they are entirely controlled by the viewport. This means that you can create a layer for an object across multiple viewports.

Here's how you can create a new ViewportLayer:

Actionscript:
  1. var layer:ViewportLayer = viewport.getChildLayer(do3d, true);
  2. //now you can mess with your ViewportLayer all you want...
  3. layer.alpha = 0.5;

getChildLayer() is the function to receive or create a new ViewportLayer. The second parameter, createNew, specifies if a new ViewportLayer should be created if one is not found for the specified DisplayObject3D. If you set createNew to false- getChildLayer will simply return the ViewportLayer for the DO3D if it exists, otherwise it will return null.

Note that your DO3D is now going to be rendered to the layer created in getChildLayer(). If you want to add other DO3Ds to this layer, you can do so by using the following function of ViewportLayer:

Actionscript:
  1. //add a new DO3D to the layer created above.
  2. layer.addDisplayObject3D(new Sphere(new ColorMaterial()));

Likewise, you can remove DO3Ds from rendering to a specific layer by using removeDisplayObject3D.

--Nesting

Something else cool about ViewportLayers is they can be nested. Each ViewportLayer handles the sorting of its own children. So lets say you want to use INDEX sort for a COLLADA object with a fair number of z-fighting children - but you want that COLLADA to be z-sorted with the rest of your world. Now, you can.

Check out initNestingDemo() from the source. You will notice that we can create an empty ViewportLayer and add it to the viewport.containerSprite (also a ViewportLayer). Then we can create children inside that layer that will be INDEX sorted. Finally we create an external layer that will be Z sorted:

Actionscript:
  1. //s, s2, and s3 are three spheres added to the scene.
  2.  
  3. //create an empty viewport layer and add it to the container
  4. var parentLayer:ViewportLayer = new ViewportLayer(viewport, null);
  5. viewport.containerSprite.addLayer(parentLayer);
  6. parentLayer.sortMode = ViewportLayerSortMode.INDEX_SORT;
  7.  
  8. //create new layers inside the empty parentLayer and set some layer indexes for them
  9. parentLayer.getChildLayer(s, true).layerIndex = 1;
  10. parentLayer.getChildLayer(s2, true).layerIndex = 2;
  11.  
  12. //add s3 to a different layer off the main container - this will be z-sorted with parentLayer (with two index sorted children)
  13. viewport.getChildLayer(s3, true);

--useOwnContainer

This property gives you the ability to tell Papervision to dynamically create a layer for your DisplayObject3D when it is rendered in the viewport. By setting DisplayObject3D.useOwnContainer to true, your object will be rendered with its own ViewportLayer. Moreover, you can assign properties to your DisplayObject3D that will be passed along to your generated Layer. These properties are:

  • filters
  • blendMode
  • alpha

By setting these properties, you can add any filter to the layer, change the blendMode of your Layer, and control the alpha of the layer. Keep in mind that you can change these properties at runtime, as a new layer is generated every render, and it will inherit the updated settings. Here is a simple snippet of using these new properties:

Actionscript:
  1. var p:Plane = new Plane(new ColorMaterial());
  2. p.useOwnContainer = true;
  3. p.filters = [new BlurFilter(int(Math.random()*16)+2int(Math.random()*16)+2)];
  4. p.blendMode= BlendMode.ADD;
  5. p.alpha = Math.random()+0.1;

You can see that we are creating a new plane, setting it to create a unique container, and then set an Additive blend mode, have a random alpha, and a random blur. In my code demo you will see that i create a large number of planes and change their filter's blur based on screenDepth (distance from the camera). Be sure to play with it.

--Effects

Effects have changed somewhat for GreatWhite too - but not too much. You still have BitmapEffectLayer - but it now extends ViewportLayer. You simply need to create a BitmapEffectLayer, at it to the containerSprite, and add your DisplayObject3Ds using addDisplayObject3D:

Actionscript:
  1. //create a new BitmapEffectLayer
  2. var bfx:BitmapEffectLayer = new BitmapEffectLayer(viewport, 500500);
  3. viewport.containerSprite.addLayer(bfx);
  4.  
  5. var s:Sphere = new Sphere(new WireframeMaterial());
  6. scene.addChild(s);
  7.  
  8. //add the sphere to the layer
  9. bfx.addDisplayObject3D(s);
  10.  
  11. //add a blur effect to the layer
  12. bfx.addEffect(new BitmapLayerEffect(new BlurFilter(228)));

You can add effects to other ViewportLayers by simply using the filters property inherent to all Sprites.

--Selective Layer Rendering

One other thing that has been added is the ability to render only selected ViewportLayers. I added this with the following scenario in mind: You have a large room, but the camera doesn't move much. You don't want to have to create a new Viewport for the floor, walls, etc - but also don't want them rendered every frame. Well, now you can tell your renderer which layers you want updated, and which to ignore. You can see this in the source under initLayerRenderDemo().

So how do we do it? All we need to do is create an Array with the ViewportLayers we want rendered - then call renderer.renderLayers(). Thats it! Here's a quick look:

Actionscript:
  1. layersToRender = new Array();
  2. layersToRender.push(viewport.getChildLayer(s, true));
  3. viewport.getChildLayer(s2, true);
  4. viewport.getChildLayer(s3, true);
  5. //pass the layer for s only to be rendered
  6. renderer.renderLayers(scene, camera, viewport, layersToRender);

Please note, that at this time, interaction will be lost for objects that aren't rendered again. I'll look into fixing this down the line.

--A Few Final Notes

Those sum up some of the biggest changes - there is some other stuff that might popup - if you have any questions, or need help figuring out whats going on - just let me know. Here are a few final tidbits:

DisplayObject3D.container - this references the last ViewportLayer your DO3D was rendered too. It is null before your object is rendered for the first time.

DisplayObject3D.createViewportLayer() - This function is another way to create a ViewportLayer. The first parameter is the viewport you want the layer created in. The second parameter specifies if you should set this to be the layer for all children of the current DO3D.

ViewportLayer.forceDepth - set this to true to set how far into the Z order your layer is rendered. Say, you know your floor should always be sorted 4500 away from the camera - but other things can sort around that. set forceDepth = true, and screenDepth = 4500 - and you've got it.

ViewportLayer.layerIndex - I mentioned it before - but you set this property when you have your layer.sortMode == RenderLayerSortMode.INDEX_SORT. Higher numbers will be higher on the DisplayList.

And again - this is beta - things will probably change. But let me or the team know if you find any bugs!!!

Get the Source

Enjoy!


Posted by chacolina
Study/Actionscript 3.02010. 6. 14. 02:39
http://sebleedelisle.com/2008/08/changing-a-cubes-material-dynamically-in-papervision3d/
Posted by chacolina
Study/Actionscript 3.02010. 5. 17. 03:08
http://blog.naver.com/hika00?Redirect=Log&logNo=150043510647




GreenSock의 tweenLite와 tweenMax는 아마도 가장 즐겨쓰는 tweener일 겁니다.
tweener를 깊이 활용하다보면 기본으로 제공되는 easing함수로는 원하는 움직임을 표현할 수 없다고 느끼게 됩니다. 좀 더 출렁거리게 하고 싶다던가, 과격한 변화를 원한다면 표준으로 제공되는 easing함수만으로는 무리가 있겠죠. 이때 자신만의 easing함수를 도입하고 싶습니다. 문제는 기존에 쓰던 tweener의 easing함수 타입과 일치해야한다는 점입니다.

GreenSock의 customEase 클래스는 이러한 베지어곡선 기반의 사용자정의 easing함수를 만들어주긴 하는데, 클럽 GreenSock에 유료로 가입해야만 쓸 수 있는 정책을 취하고 있습니다. 그럼 단지 이것 때문에 유료가입을 할 수는 없는 노릇이고 누군가 베지어변환 후 tweenLite용 easing에서 쓸 수 있는 형태로 전환해주는 클래스나 유틸을 만들어주면 해결됩니다.

만들까 하다가 좀 짜증나서 검색을 해보니 역시 같은 생각을 가진 플래셔가 이미 구축했습니다.

http://marfastic.blogspot.com/2008/08/create-custom-tweens-for-tweenlite.html

시각적인 베지어곡선 제작기도 이미 만들어서 배포하시네요.

http://rokkan.com/testing/tween/rokkan_bezierdefiner.swf

사실 이 곡선은 베지어곡선공식이 아닙니다만, 과거 플래시의 곡선형태를 기억하신다면 나름 좋습니다. 이 곡선의 느낌을 알죠.
(약간 여담인데 조절점이 하나인 곡선에서 두개인 곡선으로 변환되면 그제서야 베지어가 됩니다. 다시 네개의 조절점이 일치되는 위치로부터 도출되는 곡선을 만들 수 있는데 이는 그 유명한 넙스곡선입니다. 넙스는 수학적으로 좀 무거워서 플래시에서는 많이 활용이 안되지만 나름 쓸모가 많다는)

저 제네레이터에서 생성된 배열을 통해 tweenLite용 이징함수를 제공하는 래핑 클래스의 주요 메쏘드는 아래와 같습니다.

   public function ease(t:Number,b:Number,c:Number,d:Number){
       var i,r;
       r = BASE_WIDTH * t/d;
       for(i = 0;r>_tweenArr[i+1].Mx;++i){}
       i = _tweenArr[i];
       if(i.Px != 0){
            r=(-i.Nx+Math.sqrt(i.Nx*i.Nx-4*i.Px*(i.Mx-r)))/(2*i.Px);
       }else{
            r=-(i.Mx-r)/i.Nx;
       }
       return b-c*((i.My+i.Ny*r+i.Py*r*r)/BASE_WIDTH);
  }
수식적으로는 간단합니다만, 약간 무거워서 최적화를 해줄까하다가 귀찮아서 내버려두고 있는 중입니다.
Posted by chacolina
Study/Actionscript 3.02010. 4. 24. 21:53


public class Shape
{
    var visible:Boolean = true;
}

true 값을 가지고 있는 visible이라는 Boolean 타입 변수를 가지고 있는 Shape 클래스.

// ActionScript 2.0
class flash.display.BitmapData {}

// ActionScript 3.0
package flash.display
{
public class BitmapData {}
}

3.0 부터는 package문을 사용하기 때문에 클래스 이름에 패키지 이름을 선언할 필요 없다.

클래스 속성(class attributes)

dynamic: 실행 중에 인스턴스에 추가적인 속성을 추가할 수 있다.
final: 다른 클래스가 확장할 수 없다.
internal(default): 같은 패키지에서만 참조할 수 있다.
public: 모든 곳에서 참조할 수 있다.

생략하면 internal 사용.

클래스 본문

변수, 상수, 메서드 등을 정의할 수 있다. 

function hello():String
{
    trace("hola");
}
class SampleClass
{
    hello();
    trace("class created");
}

3.0 부터는 명령문도 포함시킬 수 있다.

class StaticTest
{
static var message:String = "static variable";
var message:String = "instance variable";
}
// In your script
var myST:StaticTest = new StaticTest();
trace(StaticTest.message); // output: static variable
trace(myST.message); // output: instance variable

3.0 부터는 static 변수와 인스턴스 변수 이름가 같은 이름을 사용할 수 있다.

클래스 프로퍼티 속성(class property attributes)

클래스의 프로퍼티들이 가질 수 있는 속성

internal(default): 같은 패키지에서만 참조 가능
private: 같은 클래스 내부에에서만 참조 가능
protected: 같은 클래스와 상속 받는 클래스에서 참조 가능.
public: 어디서나 참조 가능
static: 해당 프로퍼티가 클래스에 속한다는 것을 명시.
사용자 정의 네임스페이스: 사용자가 정의한 커스텀 네임스페이스

2.0에서는 private으로 해놔도 실행 중에 []를 사용해서 접근할 수 있는데. 3.0부터는 안 됨. 대신 클래스가 dynamic으로 선언되어 있으면 접근은 되지만 undefined가 반한됨.

static 특성

상송되지 않음. 
클래스 범위에 속함. 
인스턴스가 아니라 클래스 이름으로 접근해야 함.

사용자 정의 네임스페이스

패스 나중에 자세히

변수

var 또는 const를 사용하여 선언할 수 있다.
const 키워드로 선언한 것을 상수라고 한다.

정적 변수

class StaticVars
{
public static var totalCount:int = 0;
public static const MAX_NUM:uint = 16;
}

var또는 const와 static을 추가하여 선언한다.
클래스의 인스턴스가 아니라 클래스에 연결된다.
외부에서는 반드시 클래스 이름으로 접근해야 한다. 인스턴스로 접근하면 에러 난다.
선언할 때 초기화 해야한다. 안그러면 에러난다.

인스턴스 변수

static 키워드 없이 var 또는 const로 선언한 것.
인스턴스 마다 고유한 값을 가진다.
하위 클래스에서 재정의 할 수 없다. getter나 setter를 재정의하면 된다.

메서드

클래스 정의에 포함되는 함수.
function이라는 키워드로 정의한다.

함수 명령문으로 함수 정의
public function sampleFunction():String {}

함수 표현식으로 함수 정의
public var sampleFunction:Function = function () {}

함수 명령문 사용하는 이유
- 간결하고 쉽게 읽을 수 있다.
- override나 final 키워드 사용가능

생성자 메서드

클래스 이름과 같은 이름을 가진 함수
new 키워드로 해당 클래스의 인스턴스를 만들 떄 사용한다.

class Example
{
public var status:String;
public function Example()
{
status = "initialized";
}
}
var myExample:Example = new Example();
trace(myExample.status); // output: initialized

생성자에는 public만 사용가능. 생략하면 기본으로 public. 사용자 정의 네임스페이스도 사용 못함.
super()를 사용하여 상위 클래스의 생성자를 명시적으로 호출 가능.
super()를 명시적으로 호출하지 않으면 자동으로 제일 먼저 호출해줌.
return 문을 사용할 수는 없지만 값을 반환하지는 못한다.

정적 메서드

static 키워드로 선언한 메서드.
인스턴스가 아니라 클래스에 연결된다.

인스턴스 메서드

static 키워드 없이 선언한 메서드

getter와 settter 메서드

class GetSet
{
    private var privateProperty:String;
    public function get publicAccess():String
    {
        return privateProperty;
    }
    public function set publicAccess(setValue:String):void
    {
        privateProperty = setValue;
    }
}

getXXX, setXXX 라는 이름을 사용하지 않아도 된다.

var myGetSet:GetSet = new GetSet();
trace(myGetSet.publicAccess); // output: null
myGetSet.publicAccess = "hello";
trace(myGetSet.publicAccess); // output: hello

이렇게 사용할 수 있다.

바운드 메서드(메서드 클로저)

함수의 인자로 전달되는 메서드
함수의 반환값으로 전달되는 메서드
바운드 메서드 내부에서 this는 해당 메서드를 구현하는 인스턴스에 연결된다.
함수 클로저의 this는 호출 시점에 함수와 연결된 객체를 가리킨다. 이게 차이점이다.

class ThisTest {
    private var num:Number=3;

    function foo():void // bound method defined
    {
        trace("foo's this: " + this);
        trace("num: " + num);
    }

    function bar():Function
    {
        return foo; // bound method returned
    }
}

var myTest:ThisTest = new ThisTest();
var myFunc:Function = myTest.bar();
trace(this); 
// output: [object global]
myFunc();
/* output: 
foo's this: [object ThisTest]
output: num: 3 */

myFunc()는 바운드 메서드라 this가 여전히 자신이 속한 원래 인스턴스를 가리키고 있다.

클래스와 enum

enum을 지원하는게 딱히 없음.
그냥 java 5 이전처럼 static const 사용해서 정의.

public final class Day
{
public static const MONDAY:Day = new Day();
public static const TUESDAY:Day = new Day();
public static const WEDNESDAY:Day = new Day();
public static const THURSDAY:Day = new Day();
public static const FRIDAY:Day = new Day();
public static const SATURDAY:Day = new Day();
public static const SUNDAY:Day = new Day();
}

접기

Posted by chacolina
Study/Actionscript 3.02010. 2. 11. 17:05
이것저것 속도에 관하여 최적화가 문득 떠올라 질문드립니다.

uint보단 int가 낫다 이런식의 가끔 유용한 정보를 읽곤 하는데 혹시 이런 정보가 총망라된 문서자료 같은게 있을런지요.

(플래시 최적화에 관한 몇가지 블로그 글을 읽었는데 너무나 도움이 되었습니다)

number 형 뿐만이 아니라 모든 타입 종류별로 처리속도에 관하여 알고 싶으니 팁 알고 계신 분 덧글 부탁드립니다 :)


Posted by chacolina
Study/Actionscript 3.02010. 1. 19. 19:18
출처
http://ddongkang.tistory.com/83#recentTrackback

package
{               
02. 
03.    import flash.display.MovieClip;    
04.    import flash.display.Sprite;       
05. 
06.    /**  * @author kang  */    
07. 
08.    public class ResourceTest extends Sprite {     
09. 
10.        public function ResourceTest() {                       
11. 
12.            var mc : MovieClip = new MovieClip();                       
13. 
14.            addChild(mc);          
15. 
16.            mc.addEventListener(Event.ENTER_FRAME, onEnterframeHandler);       
17. 
18.        }  
19.        private function onEnterframeHandler(event : Event) : void {           
20. 
21.            trace("execute event");    
22. 
23.        }  
24. 
25.    }
26. 
27.}
위와 같은 코드가 있다고 하자. mc는 Event.ENTER_FRAME 이벤트를 가지고 있는 객체 이다. 하지만 어떠한 상황이 발생하여 mc를 메모리 해제를 할 경우가 발생 하였다. 많은 AS개발자들이 아래와 같은 코드를 입력하여 메모리를 해제 할 것이다. 


1.private function disposeMc(_mc:MovieClip):void{
2.    if(_mc.parent != null)     
3.    _mc.parent.removeChild(_mc);       
4.    _mc = null;<br>
5. 
6.}
mc 라는 객체의 모든 참조 값이 제거 되었으므로 mc는 Garbage collection의 수집대상이 될 것이다. 그리고 곧 메모리 상에서 사라질 것이다. 하지만 이 코드에는 문제가 있다. 이벤트를 등록했던 객체는 사라졌지만, 등록된 이벤트 자체는 사라지지 않았다. 그래서 output 창에는 execute event 메시지가 계속호출 될 것이다. 많은 Flash 개발자들이 잘못 알고 있는게 해당 객체를 제거 하면 그 객체에 등록 되어 있던 이벤트들도 제거 된다고 생각한다. 이는 아주 심각한 문제를 발생 시킬수 있는 원인을 제공한다. 컴퓨터가 느려 진다던지, 메모리 사용량 증가로 프로그램 자체나, 브라우져가 멈춰 버리는 일이 발생 할 수도 있다. 그러므로 객체를 메모리 상에서 제거 하기 전에 반드시 removeEventListener로 이벤트를 반드시 해제 해야 한다. addEventListener 의 파라미터로 약한참조를 해 주면 객체가 제거 되면 그 객체에 등록되어 있는 이벤트들도 제거 되지만 약한 참조로 했을때 불편한 점이 많기 때문에 기본값은 강한참조로 되어 있다. 
1.addEventListener()메서드
2. 
3.public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
useWeakReference 는 false 값이 기본으로 강한 참조이다. 하지만 이 파라미터를 true로 넘겨 주면 약한 참조가 된다. 위에서 언급했듯이 약한 참조로 등록된 이벤트들은 해당 객체가 제거 되었을때 같이 메모리에서 제거 된다.



이와 비슷한 경우가 MovieClip을 사용할때 발생할 수 있다. 예를 들어 다음과 같이 1~40frame까지 계속
 

루 프를 도는 MovieClip이 있다고 하자. 이렇게 루프를 돌고 있는 도중 갑자기 이 무비 클립을 메모리 상에서 제거 하면 어떤 일이 발생 할까?? 결과는 위 ENTER_FRAME 이벤트에서와 같이 계속 루프를 도는 현상이 발생한다. 계속 루프를 돈다는 것은 그 만큼 CPU를 사용한다는 말이 되고, 메모리 낭비를 하고 있다는 말이 된다. 하지만, 이걸 인식 하지 못하고 그냥 MovieClip만 제거 하면 해당 무비 클립에 대한 모든 것들이 메모리 상에서 없어 진다고 잘 못 생각하고 있는것이다. 그러므로 위와 같이 MovieClip을 사용한 작업을 할때는 꼭 MovieClip을 stop() 해 준뒤에 메모리를 해제 해 줘야 한다. stop 해주지 않고 메모리를 해제 했다간, 모든 참조 값들이 사라 졌기 때문에 해당 타임라인을 멈출 수 있는 방법이 존재 하지 않는다. 

이 러한 리소스 관리 문제는 위의 두가지 경우에만 국한된 것이 아니다. AS에서 제공하는 Sound 나 Loader를 이용한 이미지로드 및 SWF 로드 또는 Video 작업을 할때 모두 위와 같은 메모리 문제가 발생 할 수 있다. 이 사실을 항상 유념하고 Flash 작업을 해야 한다. 더 자세한 AS3에서의 메모리 관리 방법은 다음 링크를 통해 확인 하길 바란다. 




예제다운로드

아무리 여러 테스트가 있어도, 정답은 "상황에 따라 맞는 방법을 쓴다." 이네요.


Posted by chacolina
Study/Actionscript 3.02010. 1. 19. 17:40
출처

Eversince the release of Flash 8, I’ve rarely published a Flash projectwith a HIGH stage quality. If you know why, then you can skim this postand leave me a high-five in the comments, if not then read on …

So what’s stage quality I hear some of you asking? Well, you may ofseen it feature within the default context menu of the Flash Player.And this small setting defines how certain elements areanti-aliased/smoothed within your Flash application.

Here are the four available quality settings:

  • StageQuality.LOW - Graphics are not anti-aliased, and bitmaps are not smoothed.
  • StageQuality.MEDIUM - Graphics are anti-aliased using a 2 x 2 pixel grid, but bitmaps are not smoothed.
  • StageQuality.HIGH - Graphics are anti-aliased using a 4 x 4 pixel grid, and bitmaps are smoothed if the movie is static.
  • StageQuality.BEST - Graphics are anti-aliased using a 4 x 4 pixel grid and bitmaps are always smoothed.

So, HIGH and BEST sounds really awesome right? Think again! Let’s take a brief look at (vector) graphics:

Vector graphics (also called geometric modeling orobject-oriented graphics) is the use of geometrical primitives such aspoints, lines, curves, and polygons, which are all based uponmathematical equations to represent images in computer graphics. It isused in contrast to the term raster graphics (also know as a Bitmap),which is the representation of images as a collection of pixels, andused as the sole graphic type for actual photographic images.

When Flash renders a vector graphic, the bitmap result of the vectordata is calculated on the fly. This can be awfully taxing on the usersmachine depending on how complex the vector graphic drawing is. A largepart of this calculation goes on smoothening-out all of the lines andedges so that you end up with something that doesn’t look jaggy, andthis is where the quality setting comes into play. You can think of thequality setting as accuracy level of anti-aliasing. So, the higher theaccuracy, the more work has to be done when rendering.

So what changed in Flash 8?. Well, Bitmaps staged a military coupand took the crown away from vector graphics of course (err). Firstoff, we got the cacheAsBitmap flag, this took a lot of stress ofrendering complex vectors away such as UI components. Then we got theawesome BitmapData class (its like a freaking Swiss army knife!), andfinally we got Advanced embedded text rendering. The new text renderingis the most important reason for not using HIGH anymore as it does notsuffer from jaggies in lower modes.

Back in 2005, I created my first Flash 8 website while working at Sparkart for Mike Shinoda’s side project, Fort Minor (http://fortminor.com/site.php).I really wanted to dip my toes into as many Flash 8 features aspossible. So, in the site you’ll see blend modes, blurs, vp6,BitmapData (used for image flattening) and advanced text. But the bestthing about all of this is that the site stage quality is set to LOW!Now, this site wont win any awards for usability and the code is rushed(~2.5 week project) but you’ll see how I was able to push the speed ofthe animation by setting the quality to LOW without really loosinganything visually. An important thing to note from this is that thesite has no vector graphics, its all bitmap based.

This brings me briefly onto Papervision 3D developers who actually inspired me to write this post. Today, I came across the papervision based game “Downtown Maze Master”from Nissan. I noticed that the game was running in HIGH mode throughthe games context menu as my MacBooks core was running at 77% and mylaptops fan soon fired up. Thanks again to the context menu, I took thesetting down to LOW and immediately watched my core usage go down to54% without any anything visually bad happening in the game. I’dusually expect papervision3d developers to be close on the bleedingedge of Flash, so I wonder why the quality setting was forgotten. Andthis site is only once of many papervision3d sites guilty of this sin.End of rant, spread the word :).

Bitmaps rock your sock in Flash, but what about if you need toresize bitmap elements? Well in my world today, I work mainly oncreating application UIs vs website experiences, and my best friend is9 slice bitmap scaling. To read more about 9 slice resizing, check here.But what about if you still need to utilize vector graphics and runwith a LOW setting? Well, you may still need to use the HIGH setting ifyour vector is quite dynamic and/or shape tweened. But if your onlyplaning to pan your vector around the stage, then you might be able touse LOW successfully if you “flatten” the vector to a Bitmap in HIGHmode, then switch back to LOW.

// ActionScript 3

stage.quality = StageQuality.HIGH;
var shape:Shape = new Shape();
shape.graphics.lineStyle(2,0xcc00cc);
shape.graphics.drawCircle(100,100,100);
var bitmapCanvas:BitmapData = new BitmapData(200,200,true,0xffffff);
bitmapCanvas.draw(shape)
stage.quality = StageQuality.LOW;
var circleImg:Bitmap = new Bitmap(bitmapCanvas);
addChild(circleImg)

The result will be a wonderfully anti-aliased circle shown in LOWmode. This method also works well for cutting down the number ofelements on stage in general, just think of it as an uneditablecacheAsBitmap.

The lesson I want you to take from this post is to always play withyour default quality mode before pushing your site live. You just mightget a pleasant surprise :).


Posted by chacolina