기초 & 활용

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적 변화가 이루어졌습니다.

지금 설명하려는 것은 최신 문법에 대한 내용이 아닙니다. 긴 세월 존재해왔던 만큼 일어나는 특이한 현상이기도 합니다.

JavaScript typeof null = object?

nullJavaScript의 원시 데이터 타입입니다. 값의 제공자에 의해 비어있는 값을 표현하기 위해 고안되었습니다. 비슷한 데이터 타입으로 undefined가 있지만 null과의 데이터 타입은 다릅니다. undefined의 데이터 타입은 “undefined”입니다.

그렇다면 null의 데이터 타입은 무엇일까요? null이라고 생각하실 수 있겠지만 정답은 object입니다. typeof null의 결과가 뜬금없이 object가 나오는 이유입니다.

null의 데이터 타입이 object일까요? 에 대한 정답은 아주 허무합니다. 사실 이 것은 JavaScript 문법 자체의 알려진 버그입니다.

이 문제가 알려진 후 수정을 위해 새로운 ECMA 표준 제안이 만들어지기도 했습니다. 하지만 문제가 너무 오래 전 부터 발생하였기도 하고, 무심코 타입을 변경했다가는 수많은 프로젝트에 악영향을 미칠 것을 고려해 현재까지도 이 문제를 고치지 않고 유지하고 있는 것이었습니다.

따라서 null의 데이터 검증이나 타입 검사를 하기 전에는 데이터 타입이 의도와는 다를 수 있으므로 유의해주셔야 합니다.

참고자료

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

1개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

1개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

1개월 ago

윈도우 11 설치 시 Microsoft 계정 로그인 없이 로컬 계정 만들기

언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…

6개월 ago

에어팟 프로 2 케이스 스피커 소리를 완전히 끄는 방법

애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…

9개월 ago

Docker Compose ‘found character that cannot start any token’ 해결

Docker Compose를 사용하여 서비스를 빌드하여 실행하기 위해 docker compose up 명령어를 사용합니다. $ docker compose…

9개월 ago