[JS] typeof null이 "object"라고?

Wooki·2024년 2월 11일
0

JavaScript

목록 보기
7/7

이펙티브 타입스크립트 책을 읽던 도중 typeof null의 결과가 object라는 내용을 보게 되었다.

"null은 원시 타입으로 알고 있는데 왜 객체타입이 되는 거지?"

구글링

구글링을 하면서 이것이 JS 초기버전에서 이어져오는 버그라는 정보를 알 수 있었고, MDN의 typeof에 관련된 내용이 있지 않을까 해서 찾아보고 이유를 찾을 수 있었다.

JS를 처음 구현할 때 JS는 값을 타입태그 으로 표현했는데, 이 때 객체와 null 둘 다 타입 태그가 0으로 되어서 발생하는 문제라고 한다.

왜 수정되지 못하고 있을까?

이를 해결하기 위해서 2011년 즈음

typeof null === "null"

이런 수정 제안이 발의되었다. 이후 실제 V8엔진에서 구현이 되었지만, 초기 버전의 JS로 개발된 많은 사이트에 영향을 미치게 되어 ECMA에 반영되지 못했다고 한다.


예시(추가)

lodash 코드를 읽어 보다가 이 내용과 관련이 있을거 같은 예시를 찾아서 추가로 작성해본다.

함수에 전달된 인수가 object인지 판단하는 함수 isObject인데, typeof null이 object를 반환하기 때문에 이를 걸러내기 위한 value != null을 추가해준 것으로 보인다.

profile
웹 개발자

0개의 댓글