ActionScript中Array和Object的异同

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:ActionScript中Array和Object的异同
  • 本文链接:http://zengrong.net/post/5.htm


正在扩展shikar的ASPService,想把Flash的Array和Object都直接传给ASP,在ASP端,Flash的Array被转换成ASP的Array,而Object被转换成ASP的Dictionary。
在检测Flash的数据类型时发现,Object和Array的数据类型都是“object”。代码如下:

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

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

for (var i in arr){
trace(typeof(i));
trace(i)
}

返回的值居然是:

string
2
string
1
string
0

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

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

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

for (var i in obj){
trace(typeof(i));
trace(i)
}

返回:

string
a
string
b
string
c

它于Array所不同的好像就是for in循环返回的顺序,Array是从最大索引值开始递减,而Object则是递增。
这样看来,在ActionScript中,Array和Object都是作为Object类型看待的,他们的结构应该相同,都使用字符串作为索引(Array可以使用数字索引读取,但内部结构中,索引还是以字符串形式存储的)。
回到文章开头,要实现我需要的功能,发现Flash端无论是Array或者Object意义已经不大。我还是采用简单的方法:将Array和Object都转换成ASP端的二维数组,第一个是Object标识符,第二个是值。