今天想写一个计算24点的class,里面用到了Array,虽然在此之前用到过很多次,但是一些细节却没有在意过,所以今天调试时遇到的很多情况都出乎意料之外,在此写出。
1、new Array( )
之前用它只用过两种
var test_array:Array = new Array(inital_len); // 创建一个长度为inital_len的空数组
var test_array:Array = new Array(1, 2, 3); // 创建一个长度为3的数组,并且其元素为1,2,3
今天突发奇想,能不能用另一个数组创建新数组呢,比如下面的
var source_array:Array = new Array(1, 2, 3);
var test_array:Array = new Array(source_array);
我想要得到的效果是test_array跟source_array一样,都有包含“1、2、3”3个元素。trace了一下,的确输出了1、2、3,但是如果执行
trace(test_array.length);
output却是1。现在知道了吧,new Array只是把soure_array作为一个元素构造了test_array而已。
2、用一个数组给另一个数组赋值
既然不能用var test_array:Array = new Array(source_array);的方式由一个数组构造另一个数组,那么我用"="可以吧!比如:
这个效果如何呢,trace了test_array的长度和内容都是预料之中的,看来的确成功了。
然后是不是可以随便操作test_array呢。比如
var source_array:Array = new Array(1, 2, 3);
var test_array:Array = source_array;
test_array.splice(0, 1);
trace("source_array = " + source_array);
trace("test_array = " + test_array);
你猜结果是什么?
source_array = 2, 3
test_array = 2, 3
Why?
我只是想改变test_array的内容,为什么source_array也改变了?难道test_array和source_array指向同一块内存?用赋值操作符时是引用而不是拷贝?查看了一下帮助手册,还真是如此!
唉,以后真的要仔细看看说明才行!