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 : '손흥민' }
'Front end > JavaScript' 카테고리의 다른 글
🔖 객체지향2. prototype (0) | 2023.02.28 |
---|---|
🔖 객체지향1. constructor(생성자 함수 짧게 줄여서 생성자) (0) | 2023.02.28 |
🔖 Rest 파라미터 (1) | 2023.02.27 |
🔖 자바스크립트 함수 (default parameter/arguments) (0) | 2023.02.27 |
🔖 스프레드 연산자(Spread operator) (0) | 2023.02.27 |