undefined

현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

전역 undefined 프로퍼티는 undefined 원시 값에 해당한다. JavaScript 의 원시 타입 중 하나이다.

Property attributes of undefined
Writable no
Enumerable no
Configurable no

문법

undefined

설명

undefined 는 전역 객체의 프로퍼티이다. 즉, 전역 스코프 내의 변수이다. undefined 의 초기 값은 undefined 원시 값이다.

요즘 브라우저에서 (JavaScript 1.8.5 / Firefox 4+), undefined 는 각 ECMAScript 5 명세에 대해 설정불가하고, 쓰기불가한 프로퍼티이다. 이 경우가 아닐 때에도 override 를 피한다. 

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

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

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

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

예제

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

당신은 undefined 를 사용할 수 있고, 변수가 값을 가지는지를 알아내기 위해 엄격한 균등(===)과 비균등(!==) 연산자를 사용할 수 있다. 다음의 코드에서, 변수 x 는 정의되지 않았으며, if 문을 수행하면 true 이다.

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

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

typeof 연산자와 undefined

대신, typeof 를 사용될 수 있다:

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

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

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

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

}

그러나, 이런 종류의 테크닉은 피해야 한다. JavaScript 는 정적 스코프 언어이다. 그래서 감싸고있는 context 안에서 그것이 선언되었는지를 보고 선언된 변수를 읽을 수 있는지 알고 있다. 유일한 예외는 전역 스코프인데, 전역 스코프는 전역 객체로 묶여있다. 그래서 전역 context 내의 변수의 존재를 체크하는 것은 전역 객체 의 프로퍼티의 존재를 체크하는 것으로 할 수 있다. (예를 들어, in 연산자를 사용).

void 연산자와 undefined

void 연산자는 제 3의 대안이다.

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

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

명세서

명서 상태 설명
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'undefined' in that specification.
Standard  
ECMAScript 5.1 (ECMA-262)
The definition of 'undefined' in that specification.
Standard  
ECMAScript 1st Edition (ECMA-262)
The definition of 'undefined' in that specification.
Standard 최초 정의. JavaScript 1.3 에서 시행됨.

브라우저 호환성

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

문서 태그 및 공헌자

 이 페이지의 공헌자: nicesh
 최종 변경: nicesh,