[Javascript Concept] typeof null===object 에 대한 고찰

728x90
반응형

javascript의 원시 타입이 뭐뭐 있었지? 하고 생각하다가 null을 보고 문득 생각이 들었다

 

null은 원시타입에 속하는데 왜 typeof null은 object이지? 

 

 

만약 javscript의 타입을 모르는 사람이 있다면

 

javscript의 원시타입은 number, string, null, undefined, symbol, boolean

 

등이 있고 참조 타입에는 object, function, array 등이 있다. 

 

 

두 타입의 차이점은 예전에 정리한 글이 있다(타입 별로 정리한 줄 알았더니 복사 얘기로 썼었네.. 한참 찾았다)

2020/10/27 - [자바스크립트_개념편] - [javascript] 얕은 복사 (참조 복사), 깊은 복사(값 복사)

 

 

찾아보니 typeof null의 결과가 object인 것은 버그라고 한다.

????????????? 네 진짜요?

 

자바스크립트 첫 번째 버전의 버그라고 한다. 역시 10일 만에 개발된 언어라서 여기저기 버그가 있긴하다.

버그를 고치자는 주장이 제기되었지만 이렇게 쓰여진 기존 코드가 너무 많아서 고칠 수 없다고 한다.

 

자바스크립트 타입검사 typeof는 타입 태그를 검사하는데 처리 순서는 이렇다

1. undefined 인지 검사한다.

2. 객체 태그를 가졌는지 검사한다. (여기서 typeof null이 할당된다)

3. 숫자, 문자, boolean을 검사한다. null에 대한 명시적인 검사가 없다. 

 

null의 타입태그를 조사했을 때 객체에 속했기 때문에 2번 검사에 걸려 object를 반환하게 된다.

 

그럼 null 타입의 검사는 어떻게 해야할까?

 

x(null값이 들어간 변수)===null // true

이렇게 일치 연산자로 검사를 해주는 방식을 사용한다

 

 

처음 null타입이 object인 것을 공부했을 때 책에 관련 내용이 기술되어 있었는지, 혹은

나는 이 사실을 알고 있었는데 까먹었는지에 대해서 기억이 나지 않는다.

 

하지만 갑자기 몰랐던 거를 검색했는데 의외의 사실이 나와서 재밌었기에 자다일어나서 글을 썼다. ㅎ

 

 

출처

2ality.com/2013/10/typeof-null.html
https://curryyou.tistory.com/183

“typeof null”의 역사 · FEDevelopers/tech.description Wiki (github.com)

 

728x90
반응형
TAGS.

Comments