首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

AS3各种判断圈套.以及处理方法

2012-10-11 
AS3各种判断陷阱......以及处理方法AS3各种判断陷阱......以及处理方法 2011年11月02日  陷阱一: 判断xml

AS3各种判断陷阱......以及处理方法

AS3各种判断陷阱......以及处理方法
2011年11月02日
  陷阱一: 判断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)="+getQualifiedClassName(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".

热点排行