定义数组aa=【1,2,3,4,5】
定义数组bb=数组aa;
那么删除数组 bb 的第三个元素之后,数组aa=?
在数组 bb 的第一个元素后面插入三个元素之后,数组aa=??
代码如下:
var aa:Array = [1, 2, 3, 4, 5];
trace("定义数组 aa 并赋值= "+aa);
var bb:Array = aa;
trace("定义数组 bb = aa,则数组 bb = "+bb);
bb.splice(2, 1);
trace("删除数组 bb 的第三个元素之后——");
trace("数组 bb = "+bb);
trace("数组 aa = "+aa);
bb.splice(1, 0, "a", "b", "c");
trace("在数组 bb 的第一个元素后面插入三个元素之后——");
trace("数组 bb = "+bb);
trace("数组 aa = "+aa);
stop();
输出结果如下:
定义数组 aa 并赋值= 1,2,3,4,5
定义数组 bb = aa,则数组 bb = 1,2,3,4,5
删除数组 bb 的第三个元素之后——
数组 bb = 1,2,4,5
数组 aa = 1,2,4,5
在数组 bb 的第一个元素后面插入三个元素之后——
数组 bb = 1,a,b,c,2,4,5
数组 aa = 1,a,b,c,2,4,5
也就是说,数组aa的元素也发生了变化~~~~~
原因是——actionscript中数组的赋值只是把引用指向了目标数组,而没有得到目标数组的副本。
若想让数组bb不指向数组aa的存储空间,而是得到数组aa的副本,则需要遍历数组aa,把数组aa的元素值逐个赋值给数组bb的对应元素。
代码如下:
var aa:Array = [1, 2, 3, 4, 5];
trace("定义数组 aa 并赋值= "+aa);
var bb:Array = [];
for(var i=0;i<aa.length;i++)
{
bb[i] = aa[i];
}
trace("定义数组 bb 并把数组 aa 的元素逐个赋值给数组 bb,则bb = "+bb);
bb.splice(2, 1);
trace("删除数组 bb 的第三个元素之后——");
trace("数组 bb = "+bb);
trace("数组 aa = "+aa);
bb.splice(1, 0, "a", "b", "c");
trace("在数组 bb 的第一个元素后面插入三个元素之后——");
trace("数组 bb = "+bb);
trace("数组 aa = "+aa);
stop();
输出结果如下:
定义数组 aa 并赋值= 1,2,3,4,5
定义数组 bb 并把数组 aa 的元素逐个赋值给数组 bb,则bb = 1,2,3,4,5
删除数组 bb 的第三个元素之后——
数组 bb = 1,2,4,5
数组 aa = 1,2,3,4,5
在数组 bb 的第一个元素后面插入三个元素之后——
数组 bb = 1,a,b,c,2,4,5
数组 aa = 1,2,3,4,5
数组aa的元素不再发生变化了,哈哈~~~~~