TIL— 자바스크립트의 타입

자바스크립트의 내장타입

  • null
  • undefined
  • boolean
  • number
  • object
  • symbol

object를 제외한 이들을 원시 타입(Primitives)이라고 합니다.

자바스크립트의 타입 검사는 typeof 연산자를 통해 이루어집니다. 내장타입들을 typeof 연산자를 통해 검사를 할 때 대부분은 구분이 되지만 예외적인 상황이 발생하기도 합니다. 바로 ‘null’ 값입니다.

typeof null === "object" // true

자바스크립트 내에서 null에 대한 체크는 정확히 규정되지 않은 채 오랫동안 이어갔습니다. 우리는 ‘null’을 검사할 때 typeof 연산자 뿐만 아니라 null 값에 대한 특성을 이용해 조건을 하나 더 추가해야 합니다. 바로 false 체크입니다.

null은 object 타입이면서 false 값입니다. 따라서 null의 체크는 다음과 같이 진행해야 합니다.

let is_null= null;
!is_null && typeof is_null === "object" // 오직 Null 타입만 통과합니다.

값이 없는 vs 선언되지 않은

”undefined”값이 의미하는 건 크게 두 가지입니다.

  1. 접근 가능한 스코프에 선언은 되었으나, 값이 할당되지 않았다.
  2. 변수 선언 자체가 되어있지 않다.

다시 말해, “undefined”와 “undeclared” 이 두 가지를 모두 담고 있다고 할 수 있습니다.

var a;
a; //undefined
b; //ReferenceError: B is not declared or B is not found
typeof a; //undefined
typeof b; //undefined

이것이 typeof만의 독특한 안전 가드(safety guard)입니다.

ReferenceError는 스크립트의 오류로서 브라우저가 스크립트를 실행하는 과정을 멈추는 효과를 낳게됩니다. 이는 어플리케이션의 동작과 관련이 있기 때문에 이러한 에러는 개발자로서 예민할 수 밖에 없을 것입니다.

함수의 설계 시 넘겨받는 파라미터를 점검하는 과정에 typeof를 사용하여 “undeclared”한 데이터가 넘어오더라도, typeof의 안전가드를 통해 스크립트 오류를 피할 수 있게됩니다.

요약

  1. 자바스크립트의 내장타입은 7가지 이다. (null, undefined, boolean,object, number, string, symbol)
  2. “null” 타입의 검사는 “object”와 “false”의 체크로 “null” 값 검사를 진행하도록 한다.
  3. 자바스크립트는 “undefined”와 “undeclared”를 구분하지 않고 모두 “undefined”로 뭉뚱그려서 알려준다. 이때 “undeclared”상태는 typeof를 통해 방지해준다. (안전가드)