2
var array = [];
var arr = [];
var i;
for (i = 0; i < 2; i++) {
    var temp = [];// using array[i] = new Array() works fine
    array.push(temp);
    arr.push(temp);
}
array[0].push(1);
arr[0].push(2);
alert(array[0]);

上記の JavaScript コードは [1,2] を出力します。' push([]) ' の代わりに' new Array() ' を使用すると、 [1] が得られます。問題を見つけることができましたが、理由がわかりません。誰かがこれを説明できますか

4

2 に答える 2

1

このコードは、1 つの配列を作成し、それへの参照を配列と arr の両方に配置します。

var temp = [];// using array[i] = new Array() works fine
array.push(temp);
arr.push(temp);

したがって、実行すると:

array[0].push(1);
arr[0].push(2);
alert(array[0]);

次に、最初に 1 を元の tmp にプッシュします。これは array[0] に参照があり、次に 2 を tmp に再度プッシュします。これは arr[0] にもあるため、結果として [1,2] が得られます。

私はあなたの完全な代替コードを見ませんでしたが、あなたの for ループにこれがあると仮定します:

array[i] = new Array();
arr[i] = new Array();

次に、array と arr に 2 つの別個の配列があるため、再度実行すると、次のようになります。

array[0].push(1);
arr[0].push(2);
alert(array[0]);
alert(arr[0]);

array[0] に 1、array[1] に 2 を取得します。

于 2013-07-13T10:20:08.450 に答える