최근 수정 시각 : 2023-08-26 05:04:11

undefined



파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
동명의 해체된 오버워치 프로게임단에 대한 내용은 UNDEFINED(프로게임단) 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
파일:관련 문서 아이콘.svg   관련 문서: 컴퓨터/표현
,
,
,
,
,

프로그래밍 언어 문법
{{{#!wiki style="margin: -16px -11px; word-break: keep-all" <colbgcolor=#0095c7><colcolor=#fff,#000> 언어 문법 C( 포인터) · C++( 자료형 · 특성 · 클래스 · 이름공간 · 상수 표현식) · C# · Java · Python · Kotlin · MATLAB · SQL · PHP · JavaScript
마크업 문법 HTML · CSS
개념과 용어 함수 · 인라인 함수 · 고차 함수 · 람다식 · 리터럴 · size_t · 상속 · 예외 · 조건문 · 참조에 의한 호출 · eval
기타 == · === · NaN · null · undefined · 모나드 · 배커스-나우르 표기법
프로그래밍 언어 예제 · 목록 · 분류 }}}


1. 개요2. undefined가 발생하는 경우

1. 개요

JavaScript언어에서 '아직 할당하지 않은 값'을 표현하기 위해 사용하는 값. null과는 사용 방식이 약간 다른데, null이 아예 '일부러 비워 둔 값'을 의미하는 것이라면, undefined는 아직 변수 또는 프로퍼티가 할당되지 않았음을 의미한다.

2. undefined가 발생하는 경우

자바스크립트에서는 정말 자주 볼 수 있는데, 객체에서 없는 프로퍼티를 꺼내려고 하거나[*
#!syntax javascript
const obj = {};
obj.a // undefined
], 함수를 호출할 때, 값이 들어오지 않은 매개변수를 사용하려 한다거나[*
#!syntax javascript
function f(a, b) {
    console.log(a);
    console.log(b);
}
f(1) // a는 1이 나오지만, b는 undefined로 출력됨
], 아직 값이 할당되지 않은 변수를 사용하려 할 때[*
#!syntax javascript
let a;
a // undefined
][1], 배열의 범위를 넘어서는 값을 가져오려 할 때[*
#!syntax javascript
[1, 2, 3][3] // undefined
][2], 그리고 함수가 아무것도 반환하지 않을 때[*
#!syntax javascript
function a () {}
a() // undefined
]도 undefined를 만날 수 있다!

이런 특징으로 인해 디버깅이 상당히 어려워 지는데, undefined는 (객체가 아니기에)속성도 가지지 않고, (함수도 아니기에) 호출할 수도 없다. 그래서 코드 중간에서 오타 등으로 인해 존재하지 않는 프로퍼티를 꺼냈을 때, 원하는 값 대신 undefined가 나오게 되고, 이 값을 나중에 사용하는 부분에서 Uncaught TypeError: Cannot read property '...' of undefined또는 Uncaught TypeError: ... is not a function등의 오류를 맞닥트리게 되며, 버그의 원인과 발견 지점이 멀어지게 되고, 결국엔 디버깅 난이도를 높이게 된다.

undefined로 연산을 할 경우 NaN이 나오는 경우도 있기 때문에, 대문자 N을 찾아다니는 JSFuck을 쓰는 개발자에겐 도움이 될 수도 있다(?)[3]
[1] 참고로 아예 선언 자체를 안한 변수를 사용하려고 하면 Uncaught ReferenceError: ... is not defined예외가 발생한다. [2] 다만 이 경우는 1번 경우의 특수한 사례인데, 자바스크립트에서 배열은 객체의 일종이기 때문이다. 즉 arr라는 배열이 있을 때, arr[0]는 arr객체의 0이라는 프로퍼티를 꺼낸 것과 같다. [3] [][[]]+[][[]] 만으로 NaN이 나온다!