undefined, null, NaN - 자바스크립트

이재민·2025년 6월 30일

자바스크립트

목록 보기
23/23

자바스크립트를 개발을 하다보면 값이 없거나 올바르지 않을 경우, undefined, null, NaN를 볼 수 있다.

이것들에 의미와 용도, 내부 처리 방식에서 중요한 차이점이 있습니다.

undefined

undefined는 변수는 선언되었지만 값이 할당되지 않았을 때 자바스크립트 엔진이 자동으로 부여하는 값입니다.

let a;
console.log(a); // undefined

또한, 다음의 경우에도 undefined가 발생합니다:

  • 함수에서 return 문이 없을 때
  • 객체에서 존재하지 않는 속성에 접근할 때
function test() {}
console.log(test()); // undefined

const obj = {};
console.log(obj.name); // undefined

메모리 측면에서는 undefined는 가비지 컬렉션과 직접적인 관련이 없습니다. 단지 값이 정의되지 않았음을 표현할 뿐입니다.


null

null은 개발자가 명시적으로 변수에 "값이 없다"는 것을 표현하기 위해 할당하는 값입니다.

let user = null; // 현재 사용자 정보가 없음을 명확히 표현

특히 메모리 해제와 관련이 있습니다. 예를 들어 대용량 객체를 더 이상 사용하지 않을 때, 해당 참조를 null로 설정하면 가비지 컬렉션 대상이 될 수 있습니다:

let data = { /* 큰 데이터 */ };
data = null; // 더 이상 참조하지 않으므로 메모리에서 해제 가능

undefined와 null 비교

console.log(null == undefined) //true
console.log(null === undefined) //false

NaN (Not-a-Number)

NaN은 숫자 타입이지만 수학적으로 의미 없는 계산 결과를 나타냅니다.

const result = 0 / 0;
console.log(result); // NaN

console.log(Number('abc')); // NaN

특징:

  • typeof NaN은 'number'
  • 자기 자신과 같지 않은 유일한 값: NaN === NaN은 false
  • isNaN(value) 또는 Number.isNaN(value)로 확인해야 함
console.log(NaN === NaN); // false
console.log(Number.isNaN(NaN)); // true

비교

구분의미typeof 결과개발자가 직접 설정가비지 컬렉션 관련
undefined값이 할당되지 않음"undefined"아니요아니요
null값이 없음을 의도적으로 설정"object"
NaN숫자가 아님"number"아니요아니요

예상 면접 질문

1. undefined와 null의 차이는 무엇인가요?

undefined는 값이 할당되지 않은 상태로, 자바스크립트 엔진이 자동으로 부여합니다. 반면 null은 값이 없음을 개발자가 의도적으로 표현하기 위해 사용하는 값입니다.

2 null을 사용하는 이유는 무엇인가요?

null은 어떤 값이 의도적으로 "비어있다"는 것을 명확하게 표현할 수 있으며, 객체의 참조를 끊고 메모리 해제를 유도하는 데 사용할 수 있습니다.

3. NaN은 왜 typeof가 number인가요?

NaN은 수학 연산 결과로 발생하며, JavaScript에서는 숫자형 연산의 실패를 나타내기 위해 NaN을 "number" 타입으로 정의했습니다.

4. NaN === NaN이 false인 이유는?

NaN은 계산 불능이라는 개념을 담고 있기 때문에 어떤 NaN 값도 자신과 같다고 판단하지 않습니다. 이는 IEEE 754 부동소수점 표준인 ‘NaN은 어떤 수와도 같지 않으며, 자기 자신과도 같지 않다’를 따릅니다. 즉, NaN !== NaN은 자바스크립트 고유의 이상한 동작이 아니라, IEEE 754 표준에 따라 정상적인 동작입니다.

profile
안녕하세요

0개의 댓글