자바스크립트는 원시타입과 참조타입 두가지의 자료형이 제공된다.
원시 타입 - null, undefined, string, number, boolean, symbol
참조 타입 - Array, Object, Function
원시 타입 데이터는?
- 변수에 할당될 때 메모리 상에 고정된 크기로 저장되고 해당 변수가 원시 데이터의 값을 보관한다.
- 원시 타입 자료형은 모두 변수 선언, 초기화, 할당시 값이 저장된 메모리 영역에 직접적으로 접근한다, 즉 변수에 새 값이 할당 될 때 변수에 할당된 메모리 블럭에 저장된 값을 바로 변경한다는 뜻이다.
- 변수에 새로운 값을 할당하면 변수가 참조하는 메모리 공간의 주소가 바뀌게된다.
- 값을 복사
참조 타입 데이터는?
- 자바스크립트는 객체의 메모리를 직접 조작하지 않고, 해당 객체에 대한 '참조'를 조작한다. 따라서 객체를 가리키는 값은 '참조로 접근한다.'라고 한다.
- 크기가 정해져 있지 않고 변수에 할당될 때 값이 직접 해당 변수에 저장될 수 없으며, 변수에는 데이터에 대한 참조만 저장된다. 참조 타입은 변수의 값이 저장된 메모리 블럭의 주소를 가지고 있고, 자바스크립트 엔진이 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근한다.
- 값을 참조
원시타입
let a = 1;
b = a;
a = 3;
console.log(a) //3
console.log(b) //1;
- 각 변수 간에 원시 타입 데이터를 복사할 경우 데이터의 값이 복사된다.
let a = 1;
let b = 1;
console.log(a === b) //true;
- 값이 비교된다.
ex)
let a = "기본";
a = "수정";
let b = [1,2,3,4];
참조 타입
let a = {name: "computer", num:1};
b = a;
a.name = "hy";
console.log(a) //{name: "hy", num:1}
console.log(b) //{name: "hy", num:1}
- b에 a가 들어있다고 생각하는게 아니라, b가 a를 가르키고 있다(참조하고 있다)고 생각해야한다.
- 각 변수 간에 참조 타입 데이터를 복사할 경우 데이터의 참조가 복사된다.
let a = {name: "computer", num:1};
let b = {name: "computer", num:1};
console.log(a === b) //false
- 값이 들어있는 참조(주소)가 비교된다.
ex)
let arr = [1,2,3,4,5];
let obj = {name:"hy", age:26};
'🔥 🔥' 카테고리의 다른 글
JavaScript 일급 객체 (first class citizen) (0) | 2021.04.14 |
---|---|
디바운스(Debounce)와 스로틀(Throttle) 알아보기 (0) | 2021.04.11 |
배열에서 최솟값 찾기 | JS (0) | 2021.03.23 |
Function Expressions과 Function Declarations (0) | 2021.02.09 |
실행 컨텍스트 (Execution Context) (0) | 2020.12.19 |