javascript 원시 자료형 vs 참조 자료형 연습

🐶·2021년 6월 2일
0

개념 정리

목록 보기
9/41
post-custom-banner


값을 '복사'하여 할당하는지 vs '주소'를 할당하는지 구분할 수 있어야 한다

연습 코드📝

let x = 2;
let y = x; //변수 x를 변수 y에 할당하는 경우, 변수 x의 값은 원시 자료형이기 때문에 x의 값이였던 2를 y에 복사하여 할당되고,
y=3; //y에 3이 할당되어도, 
x; //여전히 x는 2이다. x의 값을 y로 복사하여 할당했기 때문

let x = { foo: 3 };
let y = x; //변수 x를 변수 y에 할당하는 경우, 변수 x의 값은 참조 자료형이기 때문에 x의 값 { foo: 3 }의 주소를 y에 할당. 값 자체를 할당했던 위의 코드와의 차이다
y.foo = 2; //y.foo = 2, 값이 3이였던 y.foo에 2를 할당을 했습니다.
x.foo; //현재는 같은 주소를 바라보고 있는 y.foo가 2로 변경이 되었으니, 같은 곳을 바라보고 있었던 x.foo도 2가 되어야 합니다.

let x = {foo: 3};
let y = x;
y=2;
x.foo; // 참조 자료형 { foo : 3 } 에는 아무런 영향을 미치지 않았기 때문에, x.foo를 조회해도 그대로 3이 나오게 된다.

let myArray = [2, 3, 4, 5];
let ourArray = myArray;
ourArray[2] = 25; //주소값은 [2, 3, 25, 5]로 변경됨
ourArray = undefined; //원시 자료형인 undefined가 할당됨
myArray; // [2, 3, 25, 5]

let player = { score: 3 };
function doStuff(obj) { 
  obj.score = 2;
}

doStuff(player); // 함수가 호출되면 매개변수 obj에 player의 값이 할당된다. 여기서 값은 {score:3}이라는 주소값.
play.score; // 2;

let score = 80; //score에다가 80이라는 데이터값 할당.
function doStuff(value) {
  value = 90;
}

doStuff(score); //매개변수 value에 score 의 값(=80)이 할당된다, value = 90에서 value에 90이 할당된다
score; //변수 score의 값 80은, 참조 자료형이 아니기 때문에 주소값을 전달하지 않고, 값 자체를 복사하여 전달. 그래서 함수에서 어떤 일이 발생했던가와 관련이 없이 score는 초기에 할당된 값 80이 그대로 유지
profile
우당탕탕 개발일기📝🤖
post-custom-banner

0개의 댓글