플렉스·플래시·액션스크립트3
null check에 대한 고찰..
미랭군
2012. 1. 4. 17:16
http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions
위 링크에 있는 코딩 컨벤션에서도 보시면 알 수 있듯이..
flex에서는 if구문 안에서 Object를 상속 받은 모든 객체는 값의 유무에 따라서
true, false와 같이 Boolean타입의 데이터를 리턴해줍니다.
var data = []; //new Obejct();
허나 문제는
public set data(value:Object):void
{
this.data = value;
}
이렇게 data의 값을 지정하고
이것을 다시 어떤 메소드에서 null체크할 때 발생합니다.
if(data)
{
//실행
}
else
{
//실행2
}
이때 만약 0이라는 값을 이 컴포넌트에 mxml로 <comp:MyComp data="0" width="100%" height="100%"/>
하려고 할 때 약간의 문제가 발생합니다. 사실 대부분의 사람들은 null이 아닌 경우를 체크하기 위해서
if(data)라는 구문을 쓰게 되는데 "0"이라는 값을 Object타입으로 넣으면 false를 리턴하게 됩니다.
즉 null이 아닌데도 불구하고 실행2가 실행되는거죠.
Object타입일 경우엔 null체크를 if(data != null)로 정확히 명시해주셔야합니다.
Type | Can you remember which of these values coerce to false? |
---|---|
Number | 0, NaN |
String | null, "" |
XML / XMLList | null, </> |
Array | null, [] |
Object | null, {}, 0, NaN, false, </> |
* | undefined, null, {}, 0, NaN, false, </> |