본문 바로가기
  • 커뮤니티
  • 블로그
  • 북마크
Front-end/Javascript

[Javascript]자바스크립트 null typeof(타입)이 object로 나오는 원인과 대응 방법은?

by 빽짱구 2023. 5. 22.

JavaScript에서 `typeof null`을 실행하면 "object"라는 결과가 반환됩니다. 이는 JavaScript의 설계 결함 중 하나로 알려져 있습니다.

이러한 동작은 초기 버전의 JavaScript가 개발되면서 발생한 오류로 인해 현재까지 유지되고 있습니다. null은 원래 object가 아닌 개별적인 타입으로 존재해야 할 것입니다.

 

실제로 null은 값이 없음을 나타내는 원시 타입이지만, `typeof` 연산자는 null을 "null"이 아닌 "object"로 분류합니다. 이는 기존 JavaScript 엔진의 내부 구현에 기인한 문제입니다.

 

대응 방법은?

`typeof null`을 사용하여 null 타입을 확인하는 대신, null인지 확인하기 위해 엄격한 동등 비교(`===`)를 사용하거나, 다른 방법으로 null 여부를 확인하는 것이 좋습니다.

 

let value = null;

console.log(value === null);  // 출력: true

 

if 조건문 예시

let value = null;

if (value === null) {
  console.log("value는 null입니다.");
} else if (value === undefined) {
  console.log("value는 undefined입니다.");
} else {
  console.log("value는 null 또는 undefined가 아닙니다.");
}

 

수정하지 않는 이유는?

`typeof null`이 "object"로 반환되는 이유는 초기 버전의 JavaScript에서의 설계 결함으로 인해 발생한 문제입니다. 이는 JavaScript 언어의 역사적인 유산으로 간주되며, 지속되는 호환성 문제로 인해 수정되지 않았습니다.

 

이 문제는 JavaScript의 초기 개발 단계에서 발생한 오류로 인해 발생했습니다. JavaScript의 객체는 내부적으로 32비트 값의 일부를 포인터로 사용하여 구현되었습니다. 그런데 null은 객체를 가리키는 포인터로 간주되는 것이 아니라, 비어 있는 포인터로 취급되어야 할 것입니다. 그러나 초기 JavaScript에서 null은 내부적으로 객체 타입(000)으로 표시되어 "object"로 분류되었습니다.

 

이 설계 결함은 이후 버전의 JavaScript에서도 호환성을 유지하기 위해 유지되었습니다. 많은 기존 코드가 `typeof null`이 "object"로 반환되는 동작을 기대하고 작성되었기 때문에, 이를 수정하면 기존 코드와의 호환성 문제가 발생할 수 있습니다. 따라서 수정하지 않고 유지되고 있습니다.