원시 자료형이 할당될 때에는 변수에 값(value) 자체가 담기고
참조 자료형이 할당될 때는 보관함의 주소(reference)가 담긴다.
javascript에서 원시값, 또는 원시자료형이란 객체가 아니면서, 메서드도 가지지 않는 데이터 타입을 의미한다
모든 원시 값은 불변하여 변형할 수 없는 특징이 있기도 하며,
원시 값 자체와, 원시값을 할당한 변수를 혼동하지 않는 것이 매우 중요하다
변수는 새로운 값을 다시 할당할 수 있지만, 이미 생성한 원시 값은 객체, 배열, 함수와는 달리 변형할 수 없다
원시종류에는 총 7가지가 존재하며
string, number, bigint, boolean, undefined, symbol, (null)
이 중 자주 사용하는 원시는
string, number, boolean, undefined, (null) 로 구분된다
원시자료형 예제
let a = 1; // a라는 변수에 1을 할당 let b = a; // b라는 변수를 선언하고 a를 할당 b = 3; // b라는 변수는 3이라고 저장 alert(a); // 알림창 a를 실행해도 값은 변하지 않고 1이 출력
let a = 1; // a라는 변수에 1을 할당 function b(value) { // b함수 선언 매개변수 value value = 2; // 매개변수 value에 2라는 값을 전달 } b(a) // 함수b에 인자값a로 실행 결과 a는 1로 변하지 않음 // a라는 변수는 참조자료형이 아니기 때문에 주소값을 전달하지않고 값 자체를 복사하여 전달하기에 함수와는 관련이 없다
javascript에서 참조자료형은 원시자료형을 제외한 모든 값을 참조자료형이라고 부른다
참조 자료형의 데이터 자체는 원시 자료형이 보관되는 데이터 보관함이 아닌 특별한 데이터 보관함에 저장된다
데이터가 위치한 곳(메모리 상 주소)을 가리키는 주소가 변수에 저장된다
즉, 변수에는 특별한 데이터 보관함을 찾아갈 수 있는 주소가 담겨있고,
이 주소를 따라가 보면 특별한 데이터 보관함을 찾을 수 있는데, 동적(dynamic)으로 변한다
이처럼 데이터는 별도로 관리되고, 우리가 직접 다루는 변수에는 주소가 저장되기 때문에
reference data type이라고 불리며, 이런 특별한 데이터 보관함을 heap이라고 칭한다
참조자료형 예제
let a = [1, 2, 3, 4, 5]; // a라는 변수에 배열 1부터 5까지 담는다 let b = a; // b라는 변수는 a변수를 할당하고 (같다는 의미) b[0] = 5; // b변수 배열 0번째에 숫자 5를 할당한다 // 결과값 a = [5, 2, 3, 4, 5]
let a = { b: 3 }; // a라는 변수에 배열 b:3 할당 function c(obj) { // 함수 c를 선언하고 매개변수 d값을 준다 obj.b = 2; } c(a); // 함수 c를 인자값 a로 출력 // 결과갑 a = {b: 2}로 출력 // {b: 3 }주소값에서 obj.b에 2를 할당하면, obj와 b는 같은 주소값을 가지고 있기 때문에, // a.b도 2가 되게 된다