2026-01-25
undefined/null/NaN
undefined
값이 할당되지 않은 상태를 나타내는 기본값
언제 undefined가 되나?
- 변수를 선언만 하고 값 할당 X
- 함수에서 return 값이 없는 경우
- 객체에 존재하지 않는 프로퍼티 접근
- 배열 인덱스가 없는 경우
let a;
console.log(a);// undefined
functionfoo() {}
console.log(foo());// undefined
const obj = {};
console.log(obj.x);// undefined
특징
- JS가 자동으로 부여
- 타입:
undefined
typeofundefined; // "undefined"
null
의도적으로 값이 없음을 명시적으로 표현한 값
언제 사용하나?
- “비어 있음”을 개발자가 의도적으로 표현할 때
- 아직 값이 없거나 초기화 상태를 나타낼 때
let user = null; // 아직 사용자 없음
특징
- 개발자가 직접 할당
- 타입:
object(자바스크립트 설계상 버그)
typeofnull; // "object"
🌟 undefined vs null
| 구분 | undefined | null |
|---|---|---|
| 의미 | 값이 할당되지 않음 | 값이 없음을 의도적으로 표현 |
| 할당 주체 | 자바스크립트 | 개발자 |
| 사용 의도 | 초기 상태 | 비어 있음 명시 |
| typeof | undefined | object |
NaN (Not a Number)
숫자 연산 결과가 유효한 숫자가 아닐 때 반환되는 값
언제 발생하나?
- 숫자로 변환할 수 없는 값으로 연산
- 잘못된 수학 연산
Number("abc"); // NaN
0 / 0; // NaN
Math.sqrt(-1); // NaN
특징
- 타입은
number - 자기 자신과도 같지 않음 (유효하지 않은 숫자 결과”를 나타내는 특수한 값)
NaN === NaN; // false
NaN 체크 방법
Number.isNaN(value); // 가장 안전
value === NaN → 항상 false
요약
- undefined: 값이 할당되지 않은 상태 (자동)
- null: 값이 없음을 명시 (의도)
- NaN: 숫자 연산 실패 결과 (number 타입의 특수 값)
참고자료
- https://inpa.tistory.com/entry/%F0%9F%93%9A-null-undefined-NaN
- https://velog.io/@iamhayoung/JavaScript-undefined-null%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90
- https://ldd6cr-adness.tistory.com/entry/WIPUndefined-vs-null-vs-NaN