posts - 32, comments - 59, trackbacks - 0, articles - 2
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

      今天想写一个计算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指向同一块内存?用赋值操作符时是引用而不是拷贝?查看了一下帮助手册,还真是如此!

唉,以后真的要仔细看看说明才行!

只有注册用户登录后才能发表评论。