숫자가 아님(Not a number)을 의미하는 값이다.
NaN
은 전역 스코프(scope)에서 사용 가능한 읽기 전용 값이다. 숫자가 아님을 의미하는 영문 'Not a number' 에서 각 알파벳 첫 글자로 만든 이름이다.
한 가지 혼란스러운 사실은 동일한 NaN
은 서로 같지 않다라는 것입니다. typeof
연산자로 확인하면 'number'
로 원시 유형임을 확인할 수 있다. 같은 원시 유형인 undefined
를 자신과 비교 했을 때 true
라는 사실에서 이례적이다. 이러한 이유로 NaN
을 특별한 객체 유형으로 보는 경향도 있다.
typeof NaN // 'number'
NaN === NaN // false
이 결과를 바탕으로 사용자로부터 숫자를 입력받아 계산에 사용되는 로직에 활용할 수 있다. 즉, 일반 문자를 포함하여 입력 필드에 값이 입력 되었는가를 확인한 후 입력된 값을 Number()
생성자 함수를 이용해서 숫자로 형 변환을 한다. Number()
함수는 인수로 전달받은 값이 숫자가 아닌 경우에 NaN
을 반환하는 데 반환된 값을 자신과 비교하여 같은 경우에는 숫자가 맞는 것이고 같지 않을 경우에는 NaN
즉, 숫자가 아닌 일반 문자열을 입력받은 것이라 할 수 있다.
다음 예제 코드를 참고하자.
var num = document.getElementById("myNum").value;
// 기본적인 값을 체크
if (!num) {
alert("숫자를 입력해 주세요.");
return;
}
// 설정된 값을 number로 형 변환하며 number가 아닌 경우에는 NaN을 반환
num = Number(num);
// NaN은 자신과 타입까지 비교했을 경우에 결과는 false이다.
if (num !== num) {
alert("숫자만 입력해 주세요.");
return;
}
분류 | 값 | 설명 |
---|---|---|
configurable | no | |
enumerable | no | |
writable | no |