[AS3] Array의 index값이 소수이면 index가 아니다?

Programming/ActionScript 3.0 2007. 8. 6. 12:57
var ary:Array = new Array(111,222,333);
trace(ary[1/2]); // undefined
AS3의 dynamic 클래스의 인스턴스는 실행시 동적으로 프로퍼티를 추가할 수 있는데 예를 들어
var obj:Object = new Object();
obj.value = 444;
trace(obj.value); // 444
위와 같이 obj에 추가한 value 변수의 값을 동적으로 할당할 수 있다. ActionScript에서는 이러한 동적인 프로퍼티의 할당은 해시 맵(연상배열 or 결합배열)으로 되어 있어 [] 연산자로 액세스가 가능하다.
var obj:Object = new Object();
obj.value = 555;
trace(obj["value"]); // 555

obj["name"] = "AS3";
trace(obj.name); // AS3
이와 같이 Array도 dynamic class이므로 동적으로 프로퍼티를 할당할 수 있다.
var ary:Array = new Array(111,222,333);
ary["value"] = 444;
ary["name"] = "AS3";

trace(ary.value); // 444
trace(ary["name"]); // AS3
trace(ary[0]); // 111

배열의 index를 문자열이 아닌 음수나 소수로 할 경우에는 정수로 치환되지 않고 문자열인 결합배열로 취급한다.
var ary:Array = new Array();
ary[1/2] = 111;
trace(ary[0.5]); // 111
trace(ary["0.5"]); // 111

배경에는 length를 통해서 배열 원소의 개수를 취득할 수 있는데 이때 결합배열(문자열 키로 참조)로 되어 있는 것은 length에 포함되지 않는다.
var ary:Array = new Array(111,222,333);
ary[1/2] = 111;
trace(ary.length); // 3

아래와 같이 동적으로 배열의 인덱스 값을 계산하여 사용할 경우에는 int형으로 치환해 주는 것에 주의해야 한다.
var ary:Array = new Array(111,222,333);
ary[int(1/2)] = 444;
trace(ary[0]); // 444

    

설정

트랙백

댓글