2016-10-17 12 views
-1

2番目の配列=最初の配列に作成され、次に2番目の配列で 'shift'が実行され、最初の配列にも影響があります。以下のコードを参照してください。私はsecondArrayがシフトの後でLarryとMoeを含み、firstArrayが元の3つの要素を持つことを期待しています。シフトの後、両方の配列はLarryとMoeを要素として持つだけですか?javascript配列が一緒に変更される

ここ
var firstArray = ["Curly", "Larry", "Moe"] 
var secondArray = firstArray; 
var thirdArray = firstArray; 
alert("This is first array " + firstArray + "<br>"); 
secondArray.shift(); 
alert("This is first array " + firstArray + "<br>"); 
alert("This is second array " + secondArray + "<br>"); 
alert("This is third array " + thirdArray + "<br>"); 
+0

あなたは配列のコピーを作成していません - 'secondArray' 'thirdArray'は文字通り同じ配列に参照されています。 – vlaz

+2

[JavaScriptで値を配列にコピー]の複製があります(http://stackoverflow.com/questions/7486085/copying-array-by-value-in-javascript) –

答えて

0

secondArray & thirdArrayfirstArrayの代わりに新たな独立した配列と同じ配列を指します。

この理由は配列である配列

var firstArray = ["Curly", "Larry", "Moe"] 
var secondArray = firstArray.slice(); 
var thirdArray = firstArray.slice(); 
alert("This is first array " + firstArray + "<br>"); 
secondArray.shift(); 
alert("This is first array " + firstArray + "<br>"); 
alert("This is second array " + secondArray + "<br>"); 
alert("This is third array " + thirdArray + "<br>"); 

DEMO

0

の部分の浅いコピーを返すであろうsliceを使用することができる参照タイプです。 実際の値がvalriableに保存された変数

  1. 値型の牽引タイプがあります。 EX - 文字列、数値、ブール値、ヌル、未定義
  2. 参照タイプ 値は(ヒープ内の)別の場所に保存され、それへの参照が変数に格納されます。オブジェクト、配列、関数は参照型です。

    var secondArray = firstArray;

firstArrayと店舗では、上記のコードを実行する場合、以前に 宣言された配列、secondArray変数にfirstArrayとのそれのコピー参照の参照します。上記の行を実行した後にも、secondArrayはfirstArrayの参照を持ちます。あなたは

secondArray.shift(); 

を実行すると、それはすべての3つの変数で参照してください呼ば配列から最初の値を削除します。 下記お読みくださいは、いくつかの他の方法のためのリンク以下の詳細
Primitive value vs Reference value
http://docstore.mik.ua/orelly/webprog/jscript/ch04_04.htm

あなたは以下のように配列のコピーを取得するためにスライス法を使用することができます

var secondArray = firstArray.slice(); 

REFEREに関するリンク

copy an array

関連する問題