
자바스크립트에서 원시 타입의 데이터(원시 자료형(primitive data types))는 객체가 아니면서 method를 가지지 않는 6가지의 타입을 말합니다.
string,number,boolean,undefined,symbol,bigint, (null)
'string', 42, true, false, undefined..

자바스크립트에서 원시 자료형이 아닌 모든 것은 참조 자료형(참조 타입(reference data type))입니다.
배열([]), 객체({}), 함수(function(){})가 대표적입니다.
참조 자료형에는 데이터 보관함(메모리)에 저장할 때 하나의 데이터가 아니라 '여러' 데이터를 담을 수 있습니다.

이때 '여러' 데이터는 데이터 보관함(메모리)의 동적으로 크기가 변하는 heap이라는 공간에 저장됩니다. 변수에는 실제 데이터가 위치한 곳(메모리 상 주소)을 가리키는 주소가 저장됩니다.
이처럼 데이터는 heap이라는 메모리 공간에서 별도로 관리되고, 우리가 직접 다루는 변수에는 메모리 주소가 저장되기 때문에 reference data type이라고 불립니다.
참조 자료형의 ===(strict equality)는 주소값이 같은지 확인합니다.
따라서, 아래의 값은 각각 다른 메모리 주소값을 가지고 있기 때문에 모두 false가 나옵니다.
// 메모리 heap 영역에서는 두 개의 저장 공간이 할당된 상태 입니다.
console.log([1,2,3] === [1,2,3]); // false
console.log({foo: 'bar'} === {foo: 'bar'}); // false
const nums1 = [1, 2, 3]; // [1, 2, 3]이 heap에 저장되고, 이 위치의 주소가 변수 num1에 저장됩니다.
const nums2 = [1, 2, 3]; // [1, 2, 3]이 heap에 저장되고, 이 위치의 주소가 변수 num2에 저장됩니다.
// 이제 heap에는 두 개의 [1, 2, 3]이 저장되어 있고, 각각에 대한 주소가 변수 num1, num2에 저장되어 있습니다.
console.log(num1 === num2); // false