这些阵列如何相同?

时间:2014-04-25 06:13:49

标签: actionscript-3

var oldArray:Array = new Array("a", "o", "a", "o", "a", "o", "a", "o");

      for (var i:int = 0; i < oldArray.length; i++) {


    if (i % 2 == 0) {
    trace("go to array 1 " + i);
    applesArray.push(oldArray[i]);
    }

    if (i % 2 != 0) {
    trace("go to array 2 " + i);
    orangesArray.push(oldArray[i]);
    } 

}

前两条痕迹按照我的预期出现,但如果我跟踪一条阿雷和两条阿雷,它们就会出现同样的情况。

迹(applesArray); 迹(orangesArray);

他们怎么可能一样?

1 个答案:

答案 0 :(得分:2)

我只能重现&#34;错误&#34;使用此代码:

var oldArray:Array = new Array("a", "o", "a", "o", "a", "o", "a", "o");
var applesArray:Array;
var orangesArray:Array;
applesArray = orangesArray = [];//this makes it invalid
      for (var i:int = 0; i < oldArray.length; i++) {


    if (i % 2 == 0) {
    trace("go to array 1 " + i);
    applesArray.push(oldArray[i]);
    }

    if (i % 2 != 0) {
    trace("go to array 2 " + i);
    orangesArray.push(oldArray[i]);
    } 
}           
trace(applesArray);
trace(orangesArray);

//traces output
go to array 1 0
go to array 2 1
go to array 1 2
go to array 2 3
go to array 1 4
go to array 2 5
go to array 1 6
go to array 2 7
a,o,a,o,a,o,a,o
a,o,a,o,a,o,a,o

如果它是你所做的那么你必须记住,Array不是原始对象,就像一个通过值传递的数字,像其他复杂对象一样的数组通过引用传递,并且你的两个变量都指向同一个对象。 / p>