이곳은 개발을 위한 베타 사이트 입니다.
기여내역은 언제든 초기화될 수 있으며, 예기치 못한 오류가 발생할 수 있습니다.
기여내역은 언제든 초기화될 수 있으며, 예기치 못한 오류가 발생할 수 있습니다.
undefined
덤프버전 :
||
JavaScript언어에서 '아직 할당하지 않은 값'을 표현하기 위해 사용하는 값. null과는 사용 방식이 약간 다른데, null이 아예 '일부러 비워 둔 값'을 의미하는 것이라면, undefined는 아직 변수 또는 프로퍼티가 할당되지 않았음을 의미한다.
자바스크립트에서는 정말 자주 볼 수 있는데, 객체에서 없는 프로퍼티를 꺼내려고 하거나[*
이런 특징으로 인해 디버깅이 상당히 어려워 지는데,
undefined로 연산을 할 경우 NaN이 나오는 경우도 있기 때문에, 대문자 N을 찾아다니는 JSFuck을 쓰는 개발자에겐 도움이 될 수도 있다(?)[3]
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
등의 오류를 맞닥트리게 되며, 버그의 원인과 발견 지점이 멀어지게 되고, 결국엔 디버깅 난이도를 높이게 된다.