Array()中的秘密

昨天在调试YouYeeTree类的时候总是发现子项显示的数目不对,当时就很郁闷,为什么我的数据声明正确但是显示出来的数目总是不对呢?

一下是数据声明代码:

var my_array:Array=new Array();

my_array[0]=new Object();

my_array[1]=new Object();

trace(Array(my_array).length)

//output 1

明明是两个子数据,为何返回my_array的长度是1?应该是2才对啊?!

心里郁闷了一阵再来试验:

var my_array:Array=new Array();

my_array[0]=new Object();

my_array[1]=new Object();

trace(my_array.length);

//output 2

这下又正常了,难道是Array转换反而使得其变质了?

怪小生不才一直没有想明白其中的缘由,继续查阅文档:

var obj:Object = [ "a", "b", "c" ];

var newArray:Array = Array( obj );

trace(newArray == obj); // false

trace(newArray[0] == obj); // true

trace(newArray[0][0]) // a

trace(newArray[0][1]) // b

trace(newArray[0][2]) // c

这个是帮助文档里面的例子,算是找到缘由了,再进行刚才的试验:

var my_array:Array=new Array();

my_array[0]=new Object();

my_array[1]=new Object();

trace(Array(my_array)[0].length);

//output 2

现在终于明白这是为什么了,当使用Array()的时候,其会自动创建一个新的数组,然后把Array()内的参数变成其第一个子项。

看来以后使用Array的时候就一定要留心了,这和其他类的强制转换函数很不一样。

loading...