
string, number, bigint, boolean, undefined, symbol, null
데이터 저장공간 (변수)에 하나의 데이터만 넣을 수 있는 자료형이다.
let a = 10;
let b = a;
b = 13;
console.log(a) // 10
위의 예시에 따르면, a라는 변수에 10을 할당하고, b라는 변수에 a를 할당했다.
여기서 a에 할당된 값은 number 즉, 원시자료형이다.
그렇기 때문에 b에 a를 할당한다고 해도, a의 값 10이 복사되어 할당되는 것이고, 그 b에 13을 할당하게 되면, b는 13으로 재할당되지만, a에는 변화가 없다. (주소가 아닌 값이 할당되었기 때문이다)
배열, 객체, 함수
변수에 해당 데이터를 가리키고 있는 주소가 할당된다.
참조자료형은 배열, 객체 등 여러 데이터의 집합으로 이루어져 있다.
arr = [1,2,3,4]
위의 예시의 경우 arr이라는 변수에 배열 [1,2,3,4]가 할당된 상황이다.
하지만, 정확히 말하면 변수에 배열이 할당된 것이 아니라, 변수 arr에 배열 [1,2,3,4]를 가리키고 있는 주소값이 할당된 것이다.
배열 [1,2,3,4]는 heap이라는 불리는 공간에 저장되어 있다.
let a = [1,2,3,4];
let b = a;
b[2] = 23;
console.log(a); // [1,2,23,4]
위의 예시처럼 결과가 나오는 이유는
변수 a에 배열 [1,2,3,4]를 가리키는 주소값이 할당된다. 그리고, heap의 해당주소에 [1,2,3,4]가 생성된다.
변수 b에 a를 할당한다는 것은 heap에 있는 [1,2,3,4]를 가리키는 주소값을 할당하는 것이고, 결론적으로 a와 b는 동일한 배열 [1,2,3,4]를 참조하고 있다.
그렇기 때문에, b[2]에 23을 할당한다고 하면, heap의 [1,2,3,4]에 접근하여 2번째 인덱스를 가진 원소를 23으로 바꿔주는 것이고, b가 접근한 배열은 a가 참조하고 있는 배열과 같기 때문에 변수 a에도 영향이 미치는 것이다.
let myArray = [2,3,4,5];
let ourArray = myArray;
ourArray[2] = 35;
console.log(myArray); // [2,3,35,5]
ourArray = undefined;
console.log(myArray); // [2,3,35,5]
위와 같은 경우에 myArray에는 [2,3,4,5]를 가리키고 있는 주소값이 할당되어 있고, ourArray에도 myArray에 할당된 주소값이 할당되어있다.
이럴 경우, ourArray[2] = 35를 한다면 ourArray가 참조하고 있는 배열 [2,3,4,5]의 2번째 인덱스값을 가지고 있는 원소가 35로 할당되고, 그 배열을 참조하고 있는 myArray도 변경된다.
다만, ourArray에 undefined를 할당했을 경우, ourArray에 할당된 주소값은 없어지고 undefined가 재할당된다.
즉, ourArray에 할당된 데이터가 undefined로 변한 것이기 때문에, myArray에는 영향을 미치지 않고 변경되지 않는다.