본문으로 바로가기

undefined

undefined는 전역 프로퍼티로서 원시 값에 해당합니다.

즉, JavaScript 의 원시 타입 중 하나입니다.




Syntax Description

undefined 는 전역 객체의 프로퍼티입니다. 

즉, 전역 스코프 내의 변수입니다. 

요즘 브라우저에서 (JavaScript 1.8.5 / Firefox 4+) undefined 는 각 ECMAScript 5 명세에 대해 설정불가하고, 쓰기불가한 프로퍼티입니다. 

이 경우가 아닐 때에도 override 를 피합니다. 

값을 할당받지 않은 변수는 undefined 타입입니다. 

또한 메소드 또는 문장(statement)은 수행되어야 하는 변수가 값을 할당받지 않은 경우에 undefined 를 반환합니다. 

함수는 값이 return 되지 않은 경우에 undefined 를 반환합니다. 

undefined 는 예약어가 아니기 때문에, 전역 스코프 외에 어떤 스코프에서도 식별자 (변수명)으로 사용될 수 있습니다.

javascript
(function(){ 
    var undefined = 'foo'; 
    console.log(undefined, typeof undefined);
    // "foo string" 라는 로그를 남김
})();

(function(undefined){ 
    console.log(undefined, typeof undefined); }
    // "foo string" 라는 로그를 남김
)('foo');



엄격한 균등(===)과 undefined

사용자는 undefined 를 사용할 수 있고, 변수가 값을 가지는지를 알아내기 위해 엄격한 균등(===)과 비균등(!==) 연산자를 사용할 수 있습니다. 

다음의 코드에서, 변수 x 는 정의되지 않았으며, if 문을 수행하면 true 일 것입니다.

javascript
var x;
if (x === undefined) {
   // 이 문이 실행됨
}
else {
   // 이 문이 실행되지 않음
}


여기서는 보통의 균등 연산자(==) 보다는 엄격한 균등 연산자(===) 를 사용해야 한다. 엄격 균등이 아닐 때 x == undefined 는 x 가 null 인지도 체크하기 때문이다. null 은 undefined 와 동일하지 않다.



typeof 연산자와 undefined

javascript
var x;
if (typeof x === 'undefined') {
   // 이 문이 실행됨
}

typeof 를 사용하는 이유 중 하나는 변수가 선언되지 않았어도 에러를 던지지 않기 때문이다.

javascript
// x 는 이전에 선언되지 않음
if (typeof x === 'undefined') { // 에러 없이 true 로 평가
   // 이 문이 실행됨
}

if(x === undefined){ // ReferenceError 를 던짐

}

그러나, 이런 종류의 테크닉은 피해야 합니다. 

JavaScript 는 정적 스코프 언어이기 때문에 감싸고있는 context 안에서 그것이 선언되었는지를 보고 선언된 변수를 읽을 수 있는지 알고 있습니다.

유일한 예외는 전역 스코프인데, 전역 스코프는 전역 객체로 묶여있습니다. 

그래서 전역 context 내의 변수의 존재를 체크하는 것은 전역 객체의 프로퍼티의 존재를 체크하는 것으로 할 수 있다. (예를 들어, in 연산자를 사용).



void 연산자와 undefined

void 연산자는 제 3의 대안이 될 수 있습니다./p>

javascript
var x;
if (x === void 0) {
   // 이 문이 실행됨
}

// y 는 이전에 선언된 적 없음
if (y === void 0) {
   // ReferenceError (`typeof` 에 대한) 를 던짐
}





Jaehee's WebClub


[출처] MDN(Mozilla Developer Network)