본문 바로가기
부트캠프교육중/JavaScript

[JavaScript] 원시자료형과 참조자료형 문제

by 뭉지야 2023. 1. 2.
728x90
let first = [10, 20, 30, 40];
let second = first;
second[0] = 5;

-> first = [10, 20, 30, 40]
    second =  [10, 20, 30, 40]
-> first = [5, 20, 30, 40]
    second =  [5, 20, 30, 40]
-> second는 first가 가지고 있는 주소를 그대로 가지고 있다
주소를 공유하고 있기 때문에 first도 똑같이 변경된다


let x = 2;
let y = x;
y = 3;
x는?

=> x는 2이다.

-> 원시자료형을 할당하는 경우 그 값 자체를 변수에 할당한다. 
그 값을 복사하여 변수에다가 저장한다고 생각하면 된다.
그래서 변수 x에 영향을 미치지 않는다.


let x = { foo: 3 };
let y = x;
y.foo = 2;
x.foo는?

=> 2이다.
-> 변수 x와 변수 y에 모두 같은  { foo: 3 } 이라는 객체의 주소를 바라보고 있는거다.
 같은 주소를 바라보고있는 y.foo가 2로 변경이 되었으니 같은 곳을 바라보고있던 x.foo도 2가 되어야한다.


console.log('codestates' === 'codestates');
console.log(3.14 === 3.14);
console.log([1,2,3] === [1,2,3]);
console.log({ foo: 'bar' } === { foo: 'bar' });

=> true/ true/ false/ false
-> 참조자료형의 ===은 주소값이 같은지를 확인한다.


let x = { foo: 3 };
let y = x;
y = 2;
x.foo는?

=> 3이다.
-> 변수 y는 x의 주소값을 할당받았다.
y는 2를 그후에 할당받았다.
참조자료형 { foo: 3 }에는 영향을 미치지 않기 때문에 x.foo을 조회해도 그대로 3이 나온다.
x는 {foo:3} 이고 , y는 2이다.


let myArray = [2, 3, 4, 5];
let ourArray = myArray;
ourArray[2] = 25;
ourArray = undefined;
myArray는?

=> [2, 3, 25, 5]
-> ourArray와 myArray의 주소값은 같음으로 myArray= [2,3,25,5]이다.
ourArray에 원시자료형 undefined가 할당되었기때문에 myArray에 접근할수없다.


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

doStuff(player);
player.score는?

=> 2이다
-> 함수가 호출되면 매개변수obj에 변수player의 값이 할당된다.
obj.score에 2를 할당하면, obj와 player는 같은 주소값을 가지고 있기 때문에 player.score도 2가 되게 된다.


let score = 80;
function doStuff(value) {
  value = 90;
}

doStuff(score)
score의 값은?

=> 80이다
-> 매개변수 value에 score의 값 80이 전달되고
value =90 에서 value에 90이 할당된다.
다만 변수 score의 값 80은 원시자료형이라 값자체를 복사하여 전달하게 된다. 
그래서 함수에서 어떤일이 발생했던가와 관련이 없이 score는 초기에 할당된 값 80이 그대로 유지된다.

728x90

'부트캠프교육중 > JavaScript' 카테고리의 다른 글

[JavaScript] 클로저  (0) 2023.01.02
[JavaScript] 스코프  (2) 2023.01.02
[JavaScript] 원시자료형와 참조자료형  (0) 2023.01.02
[JavaScript] for in 과 for of  (0) 2022.12.31
[JavaScript] 객체  (0) 2022.12.31