원시자료형이란 고정된 저장공간을 차지하는 데이터를 모두 원시 타입(primitive type) 데이터 라고한다.
원시자료형에는 객체가 아니면서 method를 가지지 않는 6가지 타입
string, number, bigint, boolean, undefined, symbol, null이 해당된다.
원시자료형은 하나의 데이터만 담을 수 있고 데이터 크기는 고정이 되어있다.
참조자료형이란 원시자료형이 아닌 모든 데이터 타입을 참조자료형이라고 한다. 대표적으로 함수, 객체, 배열이 있다.
참조자료형을 변수에 할당할 경우 변수에 값이 아닌 heap이라는 저장공간의 주소를 저장한다.
heap이라는 저장공간은 데이터 크기가 고정이 되어있지 않고 동적이다.
const a = [0, 50]
const b = a;
a.push(40);
console.log(b) // [0, 50, 40]
간단한 이미지와 코드로 설명을 더 하자면
참조자료형은 밸류에 값 자체가 아닌 heap 저장소의 주소값을 저장한다.
즉 a가 선언된 주소를 찾아가 값을 읽어보니 그 값도 heap의 주소값이였고, 해당 heap 에 존재하는 주소 값의 밸류를 가져오는 것이다.
그러므로 const로 선언을 한뒤 배열의 값을 변경을 해도 해당 저장공간의 밸류는 heap 저장공간의 주소 값이기 때문에 const로 배열을 선언을 해도 해당 배열의 값을 변경하는데 문제가 없다.
해당 코드에서 단순히 b에 a를 할당하는 것은 얕은복사(추후에 다룰것)이기 때문에 해당 저장공간의 같은 메모리 주소를 참조하므로 a값을 변경을 하면 b는 012c4라는 주소를 할당 받았기 때문에 b역시 [0, 50, 40]의 값을 가지게 된다.