1. undefined란?
- **"값이 할당되지 않은 상태"**를 나타냅니다.
- 변수가 선언만 되고 초기화되지 않은 상태일 때 기본값으로 자동 할당됩니다.
- 함수에서 명시적으로 값을 반환하지 않으면 undefined를 반환합니다.
- 객체에 존재하지 않는 프로퍼티를 접근할 때도 undefined가 나옵니다.
예시
let a;
console.log(a); // undefined (값이 할당되지 않음)
function foo() {}
console.log(foo()); // undefined (반환값 없음)
const obj = {};
console.log(obj.prop); // undefined (존재하지 않는 속성)
2. null이란?
- "값이 없음"을 명시적으로 나타내는 특수한 값입니다.
- 개발자가 변수를 "비어있음" 상태로 설정하고 싶을 때 직접 할당합니다.
- 타입이 객체(typeof null === "object")입니다 (자바스크립트의 역사적 버그).
예시
let b = null;
console.log(b); // null (명시적으로 빈 값을 할당)
const obj = { prop: null };
console.log(obj.prop); // null (의도적으로 빈 값 지정)
3. 차이점 요약
구분 undefined null
의미 | 값이 아직 할당되지 않음 | 값이 의도적으로 없음 (빈 값) |
할당 여부 | 자바스크립트가 자동 할당 | 개발자가 직접 할당 |
기본값 | 변수 선언 후 초기화 안 할 때 기본값 | 없음 (직접 할당해야 함) |
타입 | undefined | object (자바스크립트 역사적 버그) |
사용 목적 | "값이 정의되지 않음" 표시 | "값이 없음"을 명확히 표현 |
4. 실용적 구분 방법
let x;
console.log(x === undefined); // true (아직 값 없음)
let y = null;
console.log(y === null); // true (명시적으로 빈 값)
console.log(x == y); // true (느슨한 비교는 같다고 판단)
console.log(x === y); // false (엄격 비교는 다름)