본문 바로가기

Flash/ActionScript 3.0

[MissFlash의 ActionScript 3.0] 1.8 Checking Equality or Comparing Values

* 본 포스트는 "Joey Lott의 ActionScript 3.0 Cookbook"의 내용을 정리, 가공한 것입니다.
* 본 포스트를 퍼가실 때는 상단에 아래와 같이 원본출처를 명시해 주세요! ^^
원본 : http://blog.missflash.com/
출처 : MissFlash.com, http ://www.missflash.com/
* 포스트의 내용중 일부가 추가/수정될 수 있으므로 최신 내용을 접하고 싶으신 분은 원본글을 이용하시기 바랍니다.

1.8 Checking Equality or Comparing Values

Problem
두 개의 값이 같은지를 검사하고 싶을 때

Solution
equality, inequality 혹은 strict equality, strict inequality operator를 이용합니다. 값이 적합한 숫자인지를 확인하기 위해서는 inNaN()을 이용합니다.

Discussion
아래의 (strict) equality, inequality operator를 이용해 두 개의 값을 비교할 수 있습니다.
equality operator : ==
inequality operator : !=
strict equality operator : ===
strict inequality operator : !==

1) strict type checking 옵션이 꺼졌을 때 - 컴파일러가 컴파일 타임에 데이터타입을 체크하지 않을 때
trace(1==2); // 결과 : false
trace(1==1); // 결과 : true
trace(1=="2"); // 결과 : false
trace(1=="1"); // 결과 : true

첫 번째 예에서 1과 2는 다른 값이므로 두 값의 equality를 검사한 결과 거짓(false)을 출력합니다.
두 번째 예에서는 같은 값을 비교하므로 참(true)를 출력합니다.
특이한 것은 마지막 예에서 숫자 1과 문자열 "1"을 비교한 결과가 참(true)이라는 점입니다.

그 이유는 문자열 "1"이 값의 비교전에 숫자 1로 변환이 되기 때문입니다.
이런 결과는 projector의 속성 > ActionScript Compiler > "Enable compile-time type checking (-strict)"체크박스를 해제했을 때만 가능합니다.
(==대신 !=를 사용할 경우 반대의 결과를 얻을 수 있습니다.)


2) strict type checking 옵션이 켜졌을 때 - 컴파일러가 컴파일 타임에 데이터타입을 체크할 때
trace(1==2); // 결과 : false
trace(1==1); // 결과 : true
trace(1=="2"); // 결과 : false
trace(1=="1"); // 결과 : false

컴파일러가 컴파일 타임에 데이터타입을 체크할 경우에는 위와 같이 숫자 1과 문자열 "1"을 비교한 결과가 거짓(false)이 됩니다.
이 결과는 아래와 같이 "Enable compile-time type checking (-strict)"체크박스를 체크했을 때 가능합니다.
사용자 삽입 이미지


* 하지만, 위의 설정을 하지 않고도 엄격(strict) 한 값의 비교를 할 수 있습니다. 바로 strict equality, inequality operators를 이용하는 것입니다.
trace(1==="1"); // 결과 : false

3) 데이터타입 체크 operator - is
변수의 데이터타입을 체크하기 위해서는 is operator를 사용하면 됩니다.
var age:int = 17;
if (age is int){
  trace("The type of age is integer");
}

4) 유효하지 않은 숫자를 나타내는 데이터 타입 - NaN (Not a Number)
var age:int = 17 + "high";
if (
age == NaN){
  trace("The type of age is NaN");
}
위의 예에서 age는 숫자 17과 문자열 "high"를 더한 값으로 이는 숫자가 아니므로 NaN이 됩니다.

5) 숫자가 유효하지 않은지를 결정하는 함수 - isNaN()
var age:int = 17 + "high";
if (isNaN(
age)){
  trace("The type of age is NaN");
}

4번 예에서 "age == NaN"부분이 isNaN(age)로 바뀌었습니다.

6) 반대의 조건을 나타내는 NOT operator - !
if (!isNaN(age)){ ... }

7) ActionScript의 데이터타입 - primitive vs. composite
ActionScript의 데이터타입은 크게 primitive(string, number, Boolean)와 composite(object, sprite, array)가 있습니다.
primitive의 경우, 두 변수의 값만 동일하면 같은 것으로 인식하지만,
composite의 경우, 두 개이 완전히 같은 것을 의미해야 같은 것으로 인식합니다.

var arrayA:Array = new Array("1","2","3");
var arrayB:Array = new Array("1","2","3");
trace(arrayA == arrayB); // 결과 : false

var arrayA:Array = new Array("1","2","3");
var arrayB:Array = arrayA;
trace(arrayA == arrayB); // 결과 : true