这里做个笔记吧。
Object使用字符串作为key,即使你使用了其他类型的数据作为key,Object也会将使用的toString方法,返回([object Object])得到其字符串表示作为key来存储,也就是说Object使用toString方法进行键的比较。
var a:Object = new Object();
var ka:Object = new Object();
a[ka] = 'i am ka';
trace(a['ka']); // 输出 i am ka 你他么错误的也写上来,哎 这二货居然乱写(这里我是转载的),这里要重写toString()方法才行
Object作为关联数组 以及 动态 类 用法是这样的
var a:Object = new Object();
a.type1 = 'ssssss';
trace(a["type1"]) // ssssss
a["type2"] = "bbb";
trace(a.type2); // bbb
我自己总结:
Object 作为关联数组时 动态增加的实例变量(该变量无类型), 是转化为该变量名字的字符创表示
也可以通过 Object[String] 来增加实例变量。
Dictionary使用各种数据类型来作为key,它使用全等运算符(===)来进行键比较,在使用对象作为键时,它只比较实际的对象,即使这个对象有多个引用,在它眼中也只是一个键罢了。但是我发现一个很奇怪的现象,就是对Dictionary来说,指定key为整型字符串的时候,它会直接转换成Number类型存储,但是带小数点的浮点数字符串则依然按照字符串存储,这点有点不解~~~~~~~
var b:Dictionary = new Dictionary();
var ka:Object = new Object();
var ka_1:Object = ka;
b[ka] = 'ka here';
trace(b[ka_1]); //输出: ka here
trace(b['ka']); //输出: undefined
b['1'] = 'this is 1';
trace(b[1]); //输出: this is 1
b['1.1'] = 'this is 1.1';
for( var k:Object in b){
trace(k);
trace(typeof k);
}
/* 输出:
1
number
1.1
string
[object Object]
object
*/