현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.
전역 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) |