NaN(Not-a-Number)은 JavaScript의 전역 속성으로, '숫자가 아님'을 나타내는 특수한 값입니다. 어떤 연산 결과가 유효한 숫자가 아닐 때 이 값이 반환되며, 예를 들어 0 / 0이나 parseInt("abc") 같은 잘못된 숫자 연산의 결과가 NaN이 됩니다.
NaN 기본 문법
Number.NaN
NaN 여부 확인 방법
값이 NaN인지 판별하려면 Number.isNaN() 메서드 또는 전역 함수인 isNaN()을 사용하면 됩니다.
- isNaN(): 전역 함수로, 전달된 값을 숫자로 강제 변환한 뒤 NaN인지 검사합니다. 따라서 빈 문자열('')이나
false처럼 숫자로 변환 가능한 값은false를 반환합니다. - Number.isNaN(): ES6에서 도입된 메서드로, 타입 변환 없이 해당 값이 정확히 NaN일 때만
true를 반환하기 때문에 더 안전하고 엄격한 판별이 가능합니다.
예제 코드
아래는 isNaN() 함수를 사용해 다양한 값에 대해 NaN 여부를 확인하는 예제입니다. 버튼을 클릭하면 각 값의 검사 결과가 화면에 표시됩니다.
<!DOCTYPE html>
<html>
<body>
<button onclick="display()">Check</button>
<p id="test"></p>
<script>
function display() {
var a = "";
a = a + isNaN(434) + ": 434<br>";
a = a + isNaN(-23.1) + ": -23.1<br>";
a = a + isNaN('Hello') + ": 'Hello'<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>실행 결과
false: 434 false: -23.1 true: 'Hello' true: NaN false: '' false: 0 false: false
결과 해석
위 실행 결과를 보면 다음과 같은 특징을 알 수 있습니다.
434,-23.1,0은 정상적인 숫자이므로false가 반환됩니다.'Hello'는 숫자로 변환할 수 없어true가 반환됩니다.NaN은 당연히true입니다.- 빈 문자열(
'')과false는 숫자로 변환되면 각각0이 되기 때문에false가 반환됩니다. 이것이isNaN()의 암묵적 타입 변환 때문에 발생하는 주의할 점입니다.
따라서 타입 변환으로 인한 오류를 피하고 싶다면 Number.isNaN()을 사용하는 것이 권장됩니다. 예를 들어 Number.isNaN('')은 false를 반환하지만, 문자열 자체가 NaN이 아니므로 더 직관적인 결과를 제공합니다.