1

このコードが同じこと (1,2,3,4) を 2 回警告するのはなぜですか??

var arr = [1,2,3];
var new_arr = arr;
new_arr[new_arr.length] = 4;
alert(new_arr);
alert(arr);
4

4 に答える 4

2

JavaScript では、すべての値はプリミティブ値 (数値、文字列、ブール値、、null)undefinedまたはオブジェクトへの参照 (配列、関数など) のいずれかです。

配列は 1 つだけで、両方の変数がこの配列への参照を保持します。

個別に変更できるように別の配列が必要な場合は、最初の配列を複製します。

var arr = [1,2,3];
var new_arr = arr.slice();
于 2013-04-02T10:17:19.810 に答える
1

の配列JavaScriptreference object.

于 2013-04-02T10:20:29.790 に答える
1

これを行う場合:

var arr = [1,2,3];
var new_arr = arr;

これで、同じデータ構造を指している 2 つの変数ができました。配列の割り当ては参照によるものです。つまり、データのコピーは作成されず、両方の変数が同じ配列を指すだけです。

したがって、どちらの変数を変更しても、両方が指す同じデータを変更することになります。

だから、あなたがするとき:

new_arr[new_arr.length] = 4;

データの 1 つのコピーが変更され、両方の変数が同じ変更を報告します。

JavaScript では、データのコピーが必要な場合は、コピーを明示的に作成する必要があり、また、浅いコピー (トップ レベルの項目のみがコピーされる) と深いコピー (オブジェクトまたは配列にネストされた配列もコピーされます)。

.slice()メソッドの配列の浅いコピーは非常に簡単です。

var arr = [1,2,3];

// make a copy of the array
var new_arr = arr.slice(0);

// modify the copy
new_arr[new_arr.length] = 4;

alert(arr);        // shows length of 3
alert(new_arr);    // shows length of 4
于 2013-04-02T10:34:35.680 に答える
1

2 番目の変数を変更すると、基になる配列が操作されます。これは、両方の変数によって参照されますが (物事を表す)、1 つのことであり、2 回表示されます。

これは、参照型と値型に関係しています。

于 2013-04-02T10:17:16.373 に答える