undefined

덤프버전 :


파일:다른 뜻 아이콘.svg
은(는) 여기로 연결됩니다.
동명의 해체된 오버워치 프로게임단에 대한 내용은 UNDEFINED(프로게임단) 문서
UNDEFINED(프로게임단)번 문단을
UNDEFINED(프로게임단)# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
, {{{#!html }}}에 대한 내용은 문서
#s-번 문단을
#s-번 문단을
# 부분을
# 부분을
참고하십시오.




파일:나무위키+넘겨주기.png   관련 문서: 컴퓨터/표현




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


1. 개요[편집]


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


2. undefined가 발생하는 경우[편집]


자바스크립트에서는 정말 자주 볼 수 있는데, 객체에서 없는 프로퍼티를 꺼내려고 하거나[*
const obj = {};
obj.a // undefined
], 함수를 호출할 때, 값이 들어오지 않은 매개변수를 사용하려 한다거나[*
function f(a, b) {
    console.log(a);
    console.log(b);
}
f(1) // a는 1이 나오지만, b는 undefined로 출력됨
], 아직 값이 할당되지 않은 변수를 사용하려 할 때[*
let a;
a // undefined
][1], 배열의 범위를 넘어서는 값을 가져오려 할 때[*
[1, 2, 3][3] // undefined
][2], 그리고 함수가 아무것도 반환하지 않을 때[*
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]
파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-06 14:23:57에 나무위키 undefined 문서에서 가져왔습니다.

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