注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

★柳暗花明★

似水年华,诠释着无力的永恒······

 
 
 

日志

 
 

AS3.0的Dictionary类及其与Object类的区别  

2010-09-09 13:43:13|  分类: Action Script 3 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Dictionary

flash.utils

public dynamic class Dictionary

继承

Dictionary -> Object

语言版本 :

ActionScript 3.0

Player 版本 :

Flash Player 9

Dictionary 类用于创建属性的动态集合,该集合使用全等运算符 (===) 对非原始对象键进行键比较。将对象用作键时,会使用对象的标识来查找对象,而不是使用在对象上调用 toString() 所返回的值。 Dictionary 集合中的原始(内置)对象(例如 Number)的行为方式与它们作为常规对象的属性时的行为方式相同。

以下语句显示了一个 Dictionary 对象和一个 key 对象之间的关系

var dict = new Dictionary();

var obj = new Object();

var key:Object = new Object();

key.toString = function() { return "key" }

dict[key] = "Letters";

obj["key"] = "Letters";

dict[key] == "Letters"; // true

obj["key"] == "Letters"; // true

obj[key] == "Letters"; // true because key == "key" is true

key.toString == "key"

dict["key"] == "Letters"; // false because "key" === key is false

delete dict[key]; //removes the key

说明

   1、对于Object对象obj而言,obj[key]中的key将调用key的toString方法,返回”key”;

2、 而对于Dictionary对象dict而言,dict[“key”]中将使用全等运算符 (===) 对dict中的非原始对象键进行键比较,因为key是Object对象的引用,而”key”(引用)是String类型的不变对象”key”(值)的引用,所以在dict中并没有找到寻找的键值。

构造函数:

Dictionary()

构造函数

public 函数 Dictionary(weakKeys:Boolean = false)

创建新的 Dictionary 对象。 若要从 Dictionary 对象中删除键,请使用 delete 运算符。

参数

weakKeys:Boolean (default = false) — 指示 Dictionary 对象在对象键上使用“弱”引用。 如果对某个对象的唯一引用位于指定的 Dictionary 对象中,则键符合垃圾回收的条件,并且在回收对象时会被从表中删除。


AS3中的Dictionary类(flash.utils.Dictionary)是一个新的AS类。Dictionary类和Object唯一的区别在于:Dictionary对象可以使用非字符串作为键值对的键。例如:

var obj:Object = new Object();
        obj["name"] = 1;                            // 键是字符串"name"
        obj[1] = 2;                                      // 键是1 (被转换成字符串"1")
        obj[new Object()] = 3;                  // 键是new Object(),被转传成字符串"[object Object]" 
         for (var prop:String in obj)

 {
             trace(prop);                               // 输出:[object Object], 1, name
             trace(obj[prop]);                       // 输出:3, 2, 1
         }

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

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 prop:String in obj)

 {   
               trace(prop);                         // traces: [object Object]   
               trace(obj[prop]);                  // traces: 2   
          }

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

 import flash.utils.Dictionary;
         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 prop:* in dict)

{
              trace(prop);                              // traces: [object Object], [object Object]
              trace(dict[prop]);                      // traces: 1, 2
         }

注意:

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

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

以下是本人对Dictionary与Object的不同之处的一个小结:

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

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

  评论这张
 
阅读(1996)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017