flex中dictionary跟Object的区别与遍历


       AS3中Object和 Dictionary都可以用来保存key-value形式的数据,Dictionary类和Object唯一的区别在于:Dictionary对象可以使用非字符串作为键值对的键。例如:
  1. var obj:Object = new Object();   
  2. obj["name"] ="name"// key 字符串"name"   
  3. obj[1] = 1; // key是1 (被转换成字符串"1")   
  4. obj[new Object()] ="object"// key是new Object(),被转传成字符串"[object Object]"   
  5. for (var key:String in obj) {   
  6.         trace(key+":"+obj[key]); // 输出 1:1 [object Object]:object name:name  
  7. }  
var obj:Object = new Object(); 
obj["name"] ="name"; // key 字符串"name" 
obj[1] = 1; // key是1 (被转换成字符串"1") 
obj[new Object()] ="object"; // key是new Object(),被转传成字符串"[object Object]" 
for (var key:String in obj) { 
        trace(key+":"+obj[key]); // 输出 1:1 [object Object]:object name:name
}


也就是说,无论用什么类型的变量作为键,Object都将key转换成字符串。同时,如果你使用了不同的对象作为键,都会被转换成字符串"[object Object]"作为键,因此而指向了同一个数据。例如:

  1. var a:Object = new Object();      
  2. var b:Object = new Object();      
  3. var obj:Object = new Object();      
  4. obj[a] = 1; // obj["[object Object]"] = 1;      
  5. obj[b] = 2; // obj["[object Object]"] = 2;      
  6. for (var key:String in obj) {      
  7.        trace(key+":"+obj[key]); // traces: [object Object]:2   
  8. }  
	var a:Object = new Object();    
	var b:Object = new Object();    
	var obj:Object = new Object();    
	obj[a] = 1; // obj["[object Object]"] = 1;    
	obj[b] = 2; // obj["[object Object]"] = 2;    
	for (var key:String in obj) {    
	       trace(key+":"+obj[key]); // traces: [object Object]:2 
	}


Dictionary类将没有这个限制,你可以将键设置成任何一种数据类型。例如: 

</pre><p> </p><div class="dp-highlighter bg_javascript"><div class="bar"><div class="tools"><strong>[javascript]</strong> <a target=_blank title="view plain" class="ViewSource" href="http://blog.csdn.net/nsrainbow/article/details/6839497#">view plain</a><a target=_blank title="copy" class="CopyToClipboard" href="http://blog.csdn.net/nsrainbow/article/details/6839497#">copy</a><a target=_blank title="print" class="PrintSource" href="http://blog.csdn.net/nsrainbow/article/details/6839497#">print</a><a target=_blank title="?" class="About" href="http://blog.csdn.net/nsrainbow/article/details/6839497#">?</a></div></div><ol class="dp-c"><li class="alt"><span><span class="keyword">var</span><span> a:Object = </span><span class="keyword">new</span><span> Object();   </span></span></li><li><span><span class="keyword">var</span><span> b:Object = </span><span class="keyword">new</span><span> Object();   </span></span></li><li class="alt"><span><span class="keyword">var</span><span> dict:Dictionary = </span><span class="keyword">new</span><span> Dictionary();   </span></span></li><li><span>dict[a] = 1; <span class="comment">// dict[a] = 1; </span><span>  </span></span></li><li class="alt"><span>dict[b] = 2; <span class="comment">// dict[b] = 2; </span><span>  </span></span></li><li><span><span class="keyword">for</span><span> (</span><span class="keyword">var</span><span> key:* </span><span class="keyword">in</span><span> dict) {   </span></span></li><li class="alt"><span>       trace(key+<span class="string">":"</span><span>+dict[key]); </span><span class="comment">// traces: [object Object]:2 [object Object]:1</span><span>  </span></span></li><li><span>}  </span></li></ol></div><pre class="javascript" style="display: none;" name="code">var a:Object = new Object(); 
var b:Object = new Object(); 
var dict:Dictionary = new Dictionary(); 
dict[a] = 1; // dict[a] = 1; 
dict[b] = 2; // dict[b] = 2; 
for (var key:* in dict) { 
       trace(key+":"+dict[key]); // traces: [object Object]:2 [object Object]:1
}


 

注意:

1、虽然在trace的时候,输出的还是[object Object],但是这个结果是对象的toString的结果。在Dictionary对象中,代表的是不同的对象引用。

2、这里的key的类型是*。这是很重要的,因为dict对象中的键可能是任何数据类型的。

 

 

3、Object的键必须是字符串,或表示字符串的表达式(变量或函数),若不是字符串的表达式,则将调用toString()方法,将其转化为字符串;

4、与Object不同的是,Dictionary使用的键是对象的引用,而不是字符串,且非原始对象键调用之前是通过全等运算符(===)来进行判断,并不会将数据类型强制转换之后再进行判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值