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标识符,第二个是值。
- 文章ID:5
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/object-array/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。