Front end/JavaScript

🔖Reference data type

욱둥 2023. 2. 28. 00:05

1. Primitive data type

그냥 문자와 숫자는 

: 변수에 값이 그대로 저장됨

 

Primitive data type 다루기 : 복사

var 이름1 = '강동욱';
var 이름2 = 이름1;
이름1 = '손흥민';

console.log(이름1) // 손흥민
console.log(이름2) // 강동욱

 

 

 

2. Reference data type

Array, Object는

: 변수에 reference가 저장됨

 

reference에는 메모리주소(화살표)가 들어있다.

 

Reference data type 다루기 : 복사

var 이름1 = { name: '강동욱' };
var 이름2 = 이름1;
이름1.name = '손흥민';

console.log(이름1) // 손흥민
console.log(이름2) // 손흥민

이름2는 데이터 변경 한 적이 없는데도 변경 되어있다.

why?

► 같은 메모리주소를 갖고있기 때문에

 

그래서 array, object 함부로 복사하면 안됨!

 

헷갈리는 예제

var 이름 = { name : '강동욱' };

function 이름변경 (obj) {
  obj = { name : '손흥민' };
}

이름변경(이름);
console.log(이름); // { name : '강동욱' }

이름변경 함수에 이름을 넣었는데도 이름이 바뀌지 않았다. 왜그럴까?

일단 파라미터는 변수 생성 & 할당과 같다. 

이름변경(이름)을 하면 파라미터에 var obj = 이름 이런식으로 전달된다고 생각하면 좋다.

그렇다면 obj 에는 이름 객체가 전달된 것이 아니고 이름 객체의 메모리주소가 전달될 것이다.

 

그런데 함수 내부를 잘 보면 obj라는 변수는 obj = { name : '손흥민' } 이렇게 재할당을 해주고 있다.

이것은 obj라는 변수에 새로운 화살표를 재할당을 한 것이지 실제 이름이라는 변수는 전혀 건드리지 않고 있다. 

그래서 결국 이름은 바뀌지 않는 것이다. 

 

var 이름 = { name : '강동욱' };

function 이름변경 (obj) {
  obj.name = '손흥민';
}

이름변경(이름);
console.log(이름); // { name : '손흥민' }