2014-11-04 8 views
-2

방금 ​​배열 두 개를 만들고 배열 중 하나에 키 값 쌍을 삽입했습니다. 그런 다음 배열을 다른 배열에 할당하거나 복사합니다. 그 후 두 번째 배열에 다른 키 값 쌍을 추가했지만 원래 배열에도 반영됩니다. 예를 들어.JavaScript 배열 할당 문제

var array1 =[]; 
var array2 =[]; 
array1.value1 ='1'; 
array2 = array1; 
array2.value2 ='2'; 
console.log(array1); // it prints {value1:1, value2:2} 

왜 내가 array2 객체의 키 값 쌍을 추가하는 동안 array1 객체를 변경하나요?

+1

분명히 사본을 만들지는 않습니다. 그리고 당신은 적절하게 배열을 사용하지 않습니다. –

+0

많은 사람들이 이전에 묻는 질문이 중복되었습니다. 그 dups 중 하나를 찾으러 갈 것입니다. – jfriend00

+0

@ jfriend00 : 참조 된 질문에 대한 대답도이 질문에 대한 대답이지만, 나는이 질문을 해당 질문의 중복으로 생각하지 않습니다. 아니에요 ** 이것이 ** 무언가 **의 사본 일 가능성이 높습니다. –

답변

1

array2 = array1;과 같은 작업을 수행하면 array1에 대한 참조로 array2을 설정하기 만하면됩니다. 배열 1의 복사본을 만들려면 array2 = array1.slice();

Array 요소를 array1.value1 ='1';으로 설정할 수 없습니다. 당신이 한 일은 배열을 Object으로 바꾸는 것입니다. 그래서 당신이 정말로 일을해야 무엇 :

var array1 = []; 
var array2 = []; 
array1[0] = 1; 
array2 = array1.slice(); 
array2[1] = 2; 
1

당신이 변수를 배열 2 할 배열 1 개체를 할당하는 array2 = array1;함으로써. 따라서 array2를 수정하면 array1과 연결된 객체가 수정됩니다.

0

array1에서 array2으로 전달합니다. 다음과 같은 사본을 제출해야합니다.

 
array2 = new Array(array1); 
+0

누가 이것을 upvoted? –

+0

이것은 실제로 작동하지 않습니다. 배열의 항목으로 array1을 사용하여 배열을 만듭니다. – Vall3y

+0

잘 모르겠습니다. 나는 그것을 반박했다. :-) –