원시 타입: 변경 불가능한 값
객체 타입: 원시 타입 이외의 값
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. 변수보다는 상수를 사용함