javascript

typeof null은 왜 object일까?

Stella Yu 2018. 7. 18. 18:27

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 로 나오게 되는 것이다.






참고자료

“typeof null”의 역사

러닝 자바스립트(책)

"What's the typeof null?", and other confusing JavaScript Types

'javascript' 카테고리의 다른 글

자바스크립트 구성 요소  (0) 2019.11.26
자바스크립트 프로토타입 파헤치기  (0) 2018.08.01