
원시 타입: 변경 불가능한 값
객체 타입: 원시 타입 이외의 값
console.log(10 === 10.0); // true
Infinity, -Infinity, NaN 포함const sym = Symbol();
const sym2 = Symbol();
const obj = {};
obj[sym] = 1;
obj[sym2] = 1;
console.log(obj); // {Symbol(): 1, Symbol(): 1}
값을 저장/참조할 때, 메모리에서 읽어 들인 2진수를 해석할 때 활용됨
-> 값의 데이터 타입에 따라 그 크기가 결정됨
e.g.
const score = 100;

JS 엔진은 숫자 타입의 값을 저장하기 위해 8바이트의 메모리 공간을 확보함
반대로 값을 참조할 때는, 변수에 할당된 값이 숫자 타입이므로 8바이트 단위로 메모리 공간에 저장된 값을 읽어 들임
e.g. 2진수 01000001은 숫자로는 65, 문자열로는 'A'로 해석됨.
하지만 변수에 할당된 값이 숫자 타입의 값이라면 2진수는 숫자로 해석되게 됨
변수 타입이 선언이 아닌 할당 시점에 결정되고, 재할당을 통해 타입이 변화할 수 있는 것
cf) 정적 타입 언어: 변수 선언 시점에 변수의 타입이 결정되고 이는 변경될 수 없음. 컴파일 시 타입 체크를 수행하기 때문에 런타임 시 에러가 줄어듦 e.g. C, C++, Java...
-> 1. 꼭 필요할 때에만 변수를 사용해야 함
2. 변수의 스코프를 최대한 좁게 만들어야 함
3. 전역변수는 의도치 않게 값이 변경될 가능성이 높으므로 사용을 자제해야 함
4. 변수보다는 상수를 사용함