JS : Type

버들비·2021년 1월 17일
0

You Don't Know JS

목록 보기
1/2

자바스크립트에는 다음 7가지 내장 타입이 있다.

  • undefined
  • null
  • bolean
  • string
  • number
  • object
  • symbol (2015년 ES6부터 추가됨)

typeof 연산자를 가하면 보통 자기 자신의 타입 명칭과 동일한 문자열을 반환하지만(typeof "42" // "number") 몇가지 예외가 있다.

typeof null // "object"
typeof function (a,b) {} // "function"

null은 원시값중 유일하게 falsy 한 값을 가지며 타입은 "object"인 특별한 존재다.
function은 실제로는 obejct의 하위타입이고(호출 가능한 객체이다) 프로퍼티를 가질 수 있다. 함수에 선언된 인자 갯수는 함수 객체의 length 프로퍼티로 알 수 있다.

function hello (a,b) {}
hello.length // 2

undefined 와 undeclared

var a
typeof a // "undefined"

var b = 42
var c 
b=c
typeof b // "undefined"
typeof c // "undefined"

변수가 선언되었지만 값이 할당되지 않은 경우, typeof 연산자는 undefined 를 반환한다.
하지만 변수가 선언조차 되지 않아도(undeclared) typeof 연산자는 undefined 를 반환한다.
값이 할당되지 않은 것과 선언조차 되지 않은 것은 자바스크립트 엔진에서 다르게 취급받는다. undefined 는 다른 변수에 할당할 수 있는 값이지만, 선언조차 되지 않은 것은 ReferenceError 를 띄운다.

var a
a // undefined
b // ReferenceError
var c 
a=c // undefined
a=b // ReferenceError

undefined 와 undeclared 를 구분하지 않는 typeof 연산자의 특성을 안전가드 처럼 활용할 수 있다.
어떠한 전역변수가 선언되었는지 체크 하기 위해 다음과 같이 typeof 연산자를 사용할 수 있다.

디버그 모드를 수행하기 위해 DEBUG 라는 전역변수를 체크하는 상황이다.

if (DEBUG) {
	console.log("디버그 모드에 돌입합니다.") // 이렇게 체크 하는 경우, DEBUG 변수가 선언되지 않았다면 ReferenceError 가 발생하고 프로그램이 정지한다.
}
if (typeof DEBUG !== "undefined") {
		console.log("디버그 모드에 돌입합니다.") // 이 경우에는 DEBUG 변수가 선언되지 않았다 해도 프로그램이 정지하지 않는다. DEBUG 변수가 1. 선언되었고, 2. 할당되었으면 3. 디버그 모드에 돌입한다. 
}

0개의 댓글