AS3 if 判断的陷阱
AS3 if 判断的陷阱
2011年07月01日
陷阱一: 判断xml中是否有某个字段
陷阱case: var xml:XML = ;
if ( xml.someNOTExistField ) { //这个居然也为真!! 要知道someNOTExistField 这个是没有定义的
//下面的trace显示, xml.someNOTExistField 是一个 XMLList类型
trace("xml.someNOTExistField as Boolean) { //因为字符串永远不可能为 Boolean数据类型, 所以逻辑永远为否
trace("注意: 这个逻辑为否");
}
解决方法:
var someStr:String = xxxxx;
if( "true" == someStr ){} 或是
if( "false" != someStr ){}
问题分析:
AS3的Boolean构造其实不认String的 "true" 和 "false", 只认 "", 和非"". 陷阱五: String的逻辑判断需要注意 空字符串
陷阱case:
private function test(s:String):void {
if (s) { //这里的判断需要考虑 空字符串 的情况
trace("do something["+s+"]");
}
}
var str:String;
test(str);
str = null;
test(str);
str=""; //空字符串, 在业务上也是可能出现的
test(str);
str="hello"
test(str);//只有这个会 true
解决方法:
private function test(s:String):void {
if ( "true" == s) { //不变的法则
trace("do something["+s+"]");
}
}
问题分析:
这个和陷阱四本质上是一回事 陷阱六: XML中的true和false
陷阱case: var xml:XML = false;
trace("getQualifiedClassName(xml.f)="+getQualified ClassName(xml.f));//print XMLList
trace(xml.f);//print false
var v:Boolean = xml.f;
trace("v=" + v);//此处print为false,实为凑巧
if (xml.f) {
trace("注意: 处理为真");
}
解决方法:
if( "true" == xml.f ){} 或是
if( "false" != xml.f ){}
问题分析:
xml.f 本质是一个XMLList, 无从谈起 逻辑, XML内容的本质都是String.
因为业务逻辑的判断只关心 "true" 或是 "false".