[번역] JavaScript에서 "undefined"를 확인하는 가장 적절한 방법은 무엇인가요?

N
n-ryu

Front-End2025.12.30

Christian C. Salvadó - [Published Date]



JavaScript에서 변수가 undefined인지 테스트하는 가장 적절한 방법은 무엇인가요?

저는 다음과 같은 몇 가지 가능한 방법들을 보았습니다:
if (window.myVariable)
또는
if (typeof(myVariable) != "undefined")
또는
if (myVariable) // undefined인 경우 에러를 발생시킵니다. Try/Catch 문 안에 있어야 하나요?

답변

in 연산자와 typeof 사용하기

값에 상관없이 변수가 선언되었는지 여부를 확인하고 싶다면, in 연산자를 사용하는 것이 가장 안전한 방법입니다. 다음 예시를 살펴보세요:
// 전역 스코프(global scope)
var theFu; // theFu가 선언되었지만, 값은 undefined입니다.
typeof theFu; // "undefined"
하지만 변수나 속성(property)이 선언만 되고 초기화되지 않은 경우도 있기 때문에, 어떤 상황에서는 이것이 의도한 결과가 아닐 수도 있습니다. 더 견고한 확인을 위해 in 연산자를 사용하세요.
"theFu" in window; // true
"theFoo" in window; // false
변수가 선언되지 않았거나 undefined 값을 가지고 있는지 알고 싶다면, 문자열을 반환하는 것이 보장되는 typeof 연산자를 사용하세요:
if (typeof myVar !== 'undefined')
undefined와 직접 비교하는 것은 undefined가 덮어씌워질 수 있기 때문에 문제가 될 수 있습니다.
window.undefined = "foo";
"foo" == undefined // true
참고로, 이 문제는 ECMAScript 5판에서 수정되었으며, undefined는 쓰기 불가(non-writable) 속성이 되었습니다.
if (window.myVar) 방식은 다음과 같은 거짓 같은 값(falsy values)들도 포함하므로 그다지 견고하지 않습니다:
false
0
""
NaN
null
undefined
세 번째 경우인 if (myVariable)은 두 가지 상황에서 에러를 발생시킬 수 있습니다. 첫 번째는 변수가 정의되지 않았을 때이며, 이때는 ReferenceError가 발생합니다:
// abc가 선언된 적이 없음.
if (abc) {
// ReferenceError: abc is not defined
}
다른 경우는 변수가 정의되어 있지만, 호출될 때 에러를 발생시키는 게터(getter) 함수를 가지고 있는 경우입니다. 예를 들어:
// 또는 에러를 발생시킬 수 있는 속성인 경우
Object.defineProperty(window, "myVariable", {
get: function() { throw new Error("W00t?"); },
set: undefined
});
if (myVariable) {
// Error: W00t?
}

undefined와 직접 비교

2020년 업데이트: typeof 확인을 선호했던 이유 중 하나(즉, undefined가 재정의될 수 있다는 점)는 ECMAScript 5가 널리 채택되면서 무의미해졌습니다. 따라서 이제는 대부분의 상황에서 직접 비교를 사용하는 것이 권장됩니다:
myVariable === undefined
주의: 이는 변수가 이전에 선언되었음을 전제로 합니다. 변수가 선언된 적이 없다면, 이 방식은 ReferenceError를 발생시킵니다.

void 0 사용하기

일부 프레임워크에서는 이 접근 방식을 사용합니다:
function isUndefined(obj){
return obj === void 0;
}
이 방식은 최신 브라우저 및 구형 브라우저와 호환되며, 일부 경우의 window.undefined처럼 덮어씌워질 수 없습니다.
if (myVar === void 0) {
// 네, undefined입니다.
}

접근 방식 요약

방법
미선언 변수 작동 여부
비고
typeof myVar === 'undefined'
안전함, 미선언 변수에도 작동함
myVar === undefined
아니요
미선언 시 ReferenceError 발생
myVar === void 0
아니요
미선언 시 ReferenceError 발생
"myVar" in window
속성 존재 여부를 확인하며, undefined 여부는 확인하지 않음
if (myVar)
아니요
미선언 시 ReferenceError 발생
0
9

댓글

?

아직 댓글이 없습니다.

첫 번째 댓글을 작성해보세요!

n-ryu님의 다른 글

더보기

유사한 내용의 글