2017-03-12 2 views
0
var a=[1,2,3]; 
var b=a; 
b.push(4,5); 
console.log(b); 
console.log(a); 

[1,2,3]과 같은 값을 원합니다. 그러나 그것을 인쇄하고 있습니다. [1,2,3,4,5] 어떻게 이것을 할 수 있습니까? 도와주세요. 사전에 감사드립니다자바 스크립트에서 변수에 액세스하는 방법은 무엇입니까?

+0

'무엇을 위해서 [1,2,3] 값을 원하니? 비? 에이? 양자 모두? 다른 것? –

+0

값을 사용하려면 [1,2,3]이고 b 값은 [1,2,3,4,5]입니다. 그러나 나는 값을 얻고있다 [1,2,3,4,5]. – user1649134

+0

배열은 참조로 호출하므로 [http://stackoverflow.com/questions/6605640/javascript-by-reference-vs-by-value], concat 메소드를 사용하여 문제를 해결해야합니다. 기존 배열을 수정하지 않은 새로운 배열 해결책 : var a = [1,2,3]; b = [] .concat (a); b.push (4,5); console.log (b); console.log (a) – coder

답변

2

배열의 개체 참조를 다른 하나의 변수에 지정합니다. 그러나 여기서 원하는 것은 배열을 복사하여 새로운 인스턴스를 만드는 것입니다. 지나갈 시작 값 0

var a=[1,2,3]; 
var b= a.slice(0); 
b.push(4,5); 

console.log(b); //[1,2,3,4,5] 
console.log(a); //[1,2,3] 

Array.prototype.slice 원래 배열의 복사본을 생성한다. 그러나 하드 코딩 된 값을 전달하는 것이 정말로 염려되는 경우 call의 변형을 사용하십시오.

var b= [].slice.call(a); 
+1

답장을 보내 주셔서 감사합니다. – user1649134

0

이것은을 참조하는 '개체이기 때문입니다. 개체를 깊게 복제해야합니다.

a

123

때의 주소, 예를 들어, 메모리에 저장됩니다 ... 약 메모리의 조금 이야기하자 깊은 복제

var a=[1,2,3];  
var b= JSON.stringify(JSON.parse(a)); 
b.push(4,5);  
console.log(b); //[1,2,3,4,5]  
console.log(a); //[1,2,3] 
+0

죄송합니다. 답변의 "딥 복제"부분을 읽으십시오. p –

+0

@ JaromandaX 예. 그러나 이것은 또한 복제의 방법입니다. –

0

이 시도 당신은 당신의 코드에서 b = a을 주소 123에서 같은 a을 참조하도록 만듦으로써 둘 다 똑같은 plac 메모리에 e는 그래서 당신은 당신이 다른 을 변경 그 중 하나를 변경할 때 ... 그래서 당신이 할 수있는 방법 중 하나

var b= a.slice(0);

또는하여 두 번째 배열에 대해 메모리에 다른 장소를 만드는 것입니다

var b= JSON.stringify(JSON.parse(a));

또는

var b = [].concat(a);

관련 문제