ActionScript中Array和Object的异同

正在扩展shikar的ASPService,想把Flash的Array和Object都直接传给ASP,在ASP端,Flash的Array被转换成ASP的Array,而Object被转换成ASP的Dictionary。

在检测Flash的数据类型时发现,Object和Array的数据类型都是“object”。代码如下:

1arr = [3,4,5];
2obj ={a:3,b:4,c:5};
3trace(arr);
4trace(obj);
5//返回 object
6//返回 object

虽然这个问题早就知道,但一直没有深究。现在要区分Array和Object,就要进一步研究了。
再测试:

1for (var i in arr){
2trace(typeof(i));
3trace(i)
4}

返回的值居然是:

string
2
string
1
string
0

这说明数组的索引在ActionScript看来实际上不是数字,而是字符串!也就是说,下面这两句代码是等价的:

1var t = arr[0];
2var t = arr["0"];

为了证明我这个观点,继续测试

1for (var i in obj){
2trace(typeof(i));
3trace(i)
4}

返回:

string
a
string
b
string
c

它于Array所不同的好像就是for in循环返回的顺序,Array是从最大索引值开始递减,而Object则是递增。

这样看来,在ActionScript中,Array和Object都是作为Object类型看待的,他们的结构应该相同,都使用字符串作为索引(Array可以使用数字索引读取,但内部结构中,索引还是以字符串形式存储的)。

回到文章开头,要实现我需要的功能,发现Flash端无论是Array或者Object意义已经不大。我还是采用简单的方法:将Array和Object都转换成ASP端的二维数组,第一个是Object标识符,第二个是值。