zoukankan      html  css  js  c++  java
  • 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 }

    也就是说,无论用什么类型的变量作为键,Object都将key转换成字符串。同时,如果你使用了不同的对象作为键,都会被转换成字符串"[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 key:String in obj) {    
               trace(key+":"+obj[key]); // traces: [object Object]:2 
        }
    Dictionary类将没有这个限制,你可以将键设置成任何一种数据类型。例如:
    1 var a:Object = new Object(); 
    2 var b:Object = new Object(); 
    3 var dict:Dictionary = new Dictionary(); 
    4 dict[a] = 1; // dict[a] = 1; 
    5 dict[b] = 2; // dict[b] = 2; 
    6 for (var key:* in dict) { 
    7        trace(key+":"+dict[key]); // traces: [object Object]:2 [object Object]:1
    8 }


    注意:

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

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

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

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

  • 相关阅读:
    linux常用命令
    mysql 开发基础系列20 事务控制和锁定语句(上)
    sql server 性能调优之 资源等待 CXPACKET
    mysql 开发基础系列19 触发器
    mysql 开发基础系列18 存储过程和函数(下)
    mysql 开发基础系列17 存储过程和函数(上)
    sql server 性能调优之 资源等待PAGEIOLATCH
    mysql 开发基础系列16 视图
    mysql 开发基础系列15 索引的设计和使用
    sql server 性能调优之 当前用户请求分析 (1)
  • 原文地址:https://www.cnblogs.com/tina-smile/p/3440564.html
Copyright © 2011-2022 走看看