4

何か奇妙なことに出くわしたとき、JavaScriptでいくつかの配列をいじっていました。これが私のコードです:

var origArray = new Array("one","two","three","four","five","six","seven","eight");

var newArray = origArray.slice(1,3);
origArray[1] = "octopus";
console.log(newArray.join()); //prints two,three 

var origArray = new Array(["one","two"],["three","four"],["five","six"],["seven","eight"]);

var newArray = origArray.slice(1,3);
origArray[1][0] = "octopus";
console.log(newArray.join()); //prints octopus,four,five,six

最初のケースではなく、2番目のケースで影響を受ける理由がわかりませんnewArray。何が起きてる?

4

2 に答える 2

6

これは、浅いコピー深いコピーの違いです。

slice結果は元のオブジェクトとは別のオブジェクトですが、配列内のオブジェクト(一番下まで)が複製されたことを意味するわけではありません。それらの内部オブジェクトがたまたま配列である場合、それらはコピーとオリジナルの間で共有されます。

于 2013-01-26T22:39:08.560 に答える
0

配列は参照であるため、値ではなく参照をスライスコピーします。

于 2013-01-26T22:39:32.700 に答える