undefined
undefined
는 전역 프로퍼티로서 원시 값에 해당합니다.
즉, JavaScript 의 원시 타입 중 하나입니다.
Syntax Description
undefined
는 전역 객체의 프로퍼티입니다.
즉, 전역 스코프 내의 변수입니다.
요즘 브라우저에서 (JavaScript 1.8.5 / Firefox 4+) undefined 는 각 ECMAScript 5 명세에 대해 설정불가하고, 쓰기불가한 프로퍼티입니다.
이 경우가 아닐 때에도 override 를 피합니다.
값을 할당받지 않은 변수는 undefined 타입입니다.
또한 메소드 또는 문장(statement)은 수행되어야 하는 변수가 값을 할당받지 않은 경우에 undefined 를 반환합니다.
함수는 값이 return 되지 않은 경우에 undefined 를 반환합니다.
undefined 는 예약어가 아니기 때문에, 전역 스코프 외에 어떤 스코프에서도 식별자 (변수명)으로 사용될 수 있습니다.
(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 일 것입니다.
var x;
if (x === undefined) {
// 이 문이 실행됨
}
else {
// 이 문이 실행되지 않음
}
여기서는 보통의 균등 연산자(==) 보다는 엄격한 균등 연산자(===) 를 사용해야 한다. 엄격 균등이 아닐 때 x == undefined 는 x 가 null 인지도 체크하기 때문이다. null 은 undefined 와 동일하지 않다.
typeof 연산자와 undefined
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의 대안이 될 수 있습니다./p>
var x;
if (x === void 0) {
// 이 문이 실행됨
}
// y 는 이전에 선언된 적 없음
if (y === void 0) {
// ReferenceError (`typeof` 에 대한) 를 던짐
}
Related Info
[출처] MDN(Mozilla Developer Network)
'JavaScript > Core & 개념ㆍ용어' 카테고리의 다른 글
지역변수와 전역변수 (0) | 2016.09.29 |
---|---|
undefined와 null의 차이점 (269) | 2016.09.29 |
javaScript - 기본 타입 null (0) | 2016.09.29 |
JS Basics #3 - Array(배열), Object(객체) 그리고 함수(Function) (1) | 2016.09.09 |
JS Basics #2 - 연산자, 조건문 그리고 반복문 (0) | 2016.09.09 |