1

私はこのコードを実行し、firebug でログをチェックしています:

    var a = new Array();
var b = new Array();
for (i=0; i<2 ; i++){
    a.push(1);
    b.push(a);
    console.log("a", a);
    console.log("b", b);
};

ログには次の値が表示されます。

a [1]
b [[1]]
a [1,1]
b [[1,1],[1,1]]

私によると、値は次のようになります。

a [1]
b [[1]]
a [1,1]
b [[1],[1,1]]

私は何を間違っていますか?どうすれば必要な値を取得できますか?

4

1 に答える 1

8

の最後.pushに追加するために使用している場合、ArrayObjectであるため、 ByValではなく参照を渡しています。これは、 への今後の変更が、 にすでにある に反映されることを意味します。あなたが必要とするのは、するときにすることです。abaab.slice a.pushb

var a = new Array(), b = new Array();
for (i=0; i<2 ; i++) {
    a.push(1);
    b.push(a.slice());
    console.log("a", a);
    console.log("b", b);
};
/*
a [1]
b [[1]]
a [1, 1]
b [[1], [1, 1]]
*/
于 2013-01-30T13:19:00.810 に答える