JavaScript의 isNaN() 메서드는 전달된 값이 NaN(Not-a-Number, 숫자가 아님)인지 여부를 확인하는 데 사용됩니다. 즉, 어떤 값이 숫자로 평가될 수 없는지를 검사하는 함수입니다.
isNaN(null)이 false인 이유
isNaN(null)이 false를 반환하는 것은 의미적으로도 완전히 올바른 결과입니다. 그 핵심 이유는 다음과 같습니다.
- null은 NaN이 아닙니다. null은 '값이 없음'을 나타내는 특별한 원시 값일 뿐, NaN과는 다른 개념입니다.
- null은 숫자로 변환되면 0이 됩니다. isNaN()은 인수를 먼저 숫자로 강제 변환한 뒤 판별하는데,
Number(null)의 결과는0입니다. 0은 유효한 숫자이므로 NaN이 아니고, 따라서 isNaN()은 false를 반환합니다.
반면 undefined, 문자열 "hello" 등은 숫자로 변환하면 NaN이 되므로 isNaN()이 true를 반환합니다.
예제: 날짜 유효성 검사
isNaN()은 실무에서 주로 날짜(Date) 객체의 유효성을 검사할 때 유용하게 활용됩니다. 잘못된 형식의 날짜 문자열로 Date 객체를 생성하면 내부 값이 NaN이 되기 때문입니다. 아래 코드를 실행해 직접 확인해 보세요.
<!DOCTYPE html>
<html>
<body>
<script>
var date1, date2;
date1 = new Date("2018/1/1");
if( ! isNaN ( date1.getMonth() )) {
document.write("Valid date1: "+date1);
} else {
document.write("<br>Invalid date1");
}
date2 = new Date("20181/1");
if( ! isNaN ( date2.getMonth() )) {
document.write("<br> Valid date2: "+date2);
} else {
document.write("<br>Invalid date2");
}
</script>
</body>
</html>
위 예제에서 date1은 올바른 형식("2018/1/1")이므로 유효한 날짜로 판정되지만, date2는 형식이 잘못되어("20181/1") getMonth()가 NaN을 반환하고 Invalid로 출력됩니다.
정리
isNaN(null) == false가 성립하는 이유는 간단합니다. null은 NaN이 아니며, 숫자로 강제 변환될 때 0으로 해석되기 때문입니다. 이 동작을 정확히 이해하면 날짜 검증, 사용자 입력 처리 등에서 isNaN()을 훨씬 안전하게 활용할 수 있습니다.