通过学习官方API和cookbook,我总结了如下原因:
1.从API中我们了解到,Array和Object都是动态类,也就是我们可以给他们动态添加属性。
var obj:Object = new Object(); obj.prop1 = "value1"; obj.prop2 = "value2"; //例子1 var array:Array = new Array(); array.prop1 = "value1"; array.prop2 = "value2";
但是我们再看一个数组的例子:
//例子2 var array:Array = new Array(); array[0] = "value1"; array[1] = "value2";
这个例子和上面的那个有什么不同?array的这两种使用方法在本质上是绝对不同的。例1使用的是array对象的属性来存储值(obj亦是),而例2使用的是array的元素来存储值。也就是说,array既有obj的动态属性的特性,又有自身的元素索引的特性,所以杀鸡焉用牛刀?同时又因为array比object多出很多封装的属性和方法,flash 虚拟机创建一个Array的开销大于创建一个Object的开销。而且这些属性和方法大多不能用于操作关联数组,既然用Object就可以实现关联数组,那又何必再去使用Array呢?
2.根据哈希表(散列表)的定义,哈希表中的元素是无序的(不然怎么叫做“散列”表呢 ^_^),而Array中的元素是有序的,特别适合创建索引数组。因此创建哈希表的最佳方法是采用Object.