typeof null
typeof는 자바스크립트 변수의 자료형을 반환하는 연산자이다.
책(인사이드 자바스크립트)에서는 null 또한 자료형으로, 객체가 아니라고 한다.
하지만 왜 typeof null은 object일까?
console.log(typeof null); //object
검색해보니 null을 객체로 취급하는 설명이 보인다. 하지만 이는 틀린 설명이다.
왜냐하면 null은 객체가 아니라 원시 타입이기 때문이다.
null의 타입이 object로 나오는 건 수정할 수 없는 버그와도 같은데,
설명을 하자면 자바스크립트의 탄생까지 거슬러 올라가야 한다.
왜냐면 typeof null 버그는 자바스크립트의 첫 번째 버전의 잔재이기 때문이다.
자바스크립트의 타입 태그
자바스크립트가 처음 탄생할 적에, 자바스크립트 변수의 값은 두 부분으로 나타내었다.
- 타입 태그 (Type Tag)
- 실제 값 (Actual Value)
타입 태그는 총 5가지가 있다.
- 객체 (Object)
- 정수 (Integer)
- 실수 (Double)
- 문자 (String)
- 참/거짓 (Boolean)
타입 태그에서 객체(Object)를 참조하는 태그는 0이다.
null 값은 NULL 포인터(아무것도 가리키지 않은 상태)를 나타내는데, 사실상 0x00라는 값을 가지는 거라고 보면 된다.
0x00은 0이니, null 또한 0 타입 태그를 가지는 것과도 같다.
즉,
0 타입 태그 = null
0 타입 태그 = 객체(object)
따라서 typeof null의 결과값이 object 로 나오게 되는 것이다.
참고자료
러닝 자바스립트(책)
"What's the typeof null?", and other confusing JavaScript Types
'javascript' 카테고리의 다른 글
자바스크립트 구성 요소 (0) | 2019.11.26 |
---|---|
자바스크립트 프로토타입 파헤치기 (0) | 2018.08.01 |