JavaScript에는 7개의 원시 타입이 있으며, 그 외 모든 것(배열, 함수, 객체)은 **객체(object)**입니다.
원시 타입: string, number, boolean, null, undefined, bigint, symbol.
typeof "hi"; // "string"
typeof 42; // "number" (정수와 부동소수점 모두)
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof 10n; // "bigint"
typeof Symbol(); // "symbol"
typeof null; // "object" ← 유명한 역사적 버그!
typeof {}; // "object"
typeof []; // "object" (배열은 객체다)
typeof function(){};// "function"
1. 원시 값은 불변(immutable)이며 값으로 복사되고, 객체는 참조로 복사됩니다.
let a = 5; let b = a; b++; // a는 여전히 5 (독립적인 복사본)
let x = {n:1}; let y = x; y.n = 2; // x.n은 이제 2 (같은 객체!)
**2. typeof null === "object"**는 반드시 기억해야 할 오래된 언어 버그입니다. null을 확인하려면 직접 비교하세요(x === null).
값 대 참조를 이해하면, 공유된 객체를 변경하면 왜 "두" 변수가 모두 영향을 받는지, {} === {}가 왜 false인지, 그리고 React 같은 상태 기반 UI에서 객체를 변경하기 전에 왜 복사(스프레드)하는지를 설명할 수 있습니다.