JavaScript에서 변수가 NaN인지 확인하는 방법
NaN은 "Not-a-Number"(숫자가 아님)를 나타내는 자바스크립트의 특수한 값입니다. 주로 유효하지 않은 숫자 연산이나 실패한 형 변환의 결과로 반환됩니다. 어떤 값이 NaN인지 확인하려면 Number.isNaN() 또는 전역 함수 isNaN()을 사용하면 됩니다.
isNaN()과 Number.isNaN()의 차이점
- isNaN(): 검사 전에 값을 숫자로 강제 변환합니다. 따라서 빈 문자열('')이나
false처럼 숫자로 변환 가능한 값도false를 반환합니다. - Number.isNaN(): 타입 변환 없이 값이 정확히 NaN일 때만
true를 반환하므로 더 엄격하고 안전한 방식입니다. 최신 코드에서는 이 방법이 권장됩니다.
예제 코드
다음은 자바스크립트에서 변수가 NaN인지 확인하는 예제입니다. 버튼을 클릭하면 각 값에 대한 isNaN() 결과가 화면에 표시됩니다.
<!DOCTYPE html>
<html>
<body>
<button onclick="display()">Check</button>
<p id="test"></p>
<script>
function display() {
var a = "";
a = a + isNaN(6234) + ": 6234<br>";
a = a + isNaN(-52.1) + ": -52.1<br>";
a = a + isNaN('Website') + ": 'Website'<br>";
a = a + isNaN(NaN) + ": NaN<br>";
a = a + isNaN('') + ": ''<br>";
a = a + isNaN(0) + ": 0<br>";
a = a + isNaN(false) + ": false<br>";
document.getElementById("test").innerHTML = a;
}
</script>
</body>
</html>실행 결과 해석
isNaN(6234)→ false : 정수는 숫자이므로 NaN이 아닙니다.isNaN(-52.1)→ false : 음수 소수 역시 유효한 숫자입니다.isNaN('Website')→ true : 문자열은 숫자로 변환할 수 없어 NaN으로 판단됩니다.isNaN(NaN)→ true : 값 자체가 NaN입니다.isNaN('')→ false : 빈 문자열은 숫자 0으로 변환되므로 NaN이 아닙니다.isNaN(0)→ false : 0은 유효한 숫자입니다.isNaN(false)→ false :false는 0으로 변환되므로 NaN이 아닙니다.
정리
간단한 검사에는 isNaN()을 사용할 수 있지만, 암묵적인 타입 변환으로 인해 예상치 못한 결과가 나올 수 있습니다. 따라서 값이 실제로 NaN인지 정확하게 판별하려면 Number.isNaN()을 사용하는 것이 가장 안전하고 권장되는 방법입니다.