far

[Javascript] isNaN(), Number.isNaN() 본문

Javascript

[Javascript] isNaN(), Number.isNaN()

Eater 2023. 3. 15. 15:24

NaN

NaN이란 Not a Number라는 뜻으로 나오는 값이 숫자가 아니라는 뜻이다. 숫자 계산시 중간에 숫자가 아닌 값이 들어갔을 경우 발생한다.

 

대표적으로 NaN이 나오는 경우는 아래와 같다.

1. 숫자로 인식이 불가능한 경우 (Number(문자열), Number(undefined) 등)

2. 0을 0으로 나누는 경우 (다른 수를 0으로 나오면 NaN이 나오지 않는다.)

3. 덧셈을 제외한 문자열을 포함하는 계산식

4. 결과가 허수인 계산식 (Math.sqrt(-1))

5. 피연산자가 NaN인경우

 

isNaN()

isNaN은 매개변수가 숫자인지 검사해주는 함수로써 주어진 값이 NaN이면 true, 아니라 false를 반환한다.

function milliseconds(x) {
  if (isNaN(x)) {
    return 'Not a Number!';
  }
  return x * 1000;
}

console.log(milliseconds('100F'));
// Expected output: "Not a Number!"

console.log(milliseconds('0.0314E+2'));
// Expected output: 3140

기본적인 사용법 (MDN의 예시 코드)

 

function solution(str){
   let answer = "";
   for(let i of str){
     if(!isNaN(i)) answer += x;
   }  
   return parseInt(answer);
}

let str = "g0en2T0s8eSoft";
console.log(solution(str)); // 208 (parseInt에 의해 첫자리 0이 사라진다)

반복문에서의 사용

 

Number.isNaN()

ECMAScript (ES2015)에서 등장한 문법으로 주어진 값이 NaN이면 true를 리턴하며 isNaN()보다 좀 더 엄격한 검사가 가능하다.

function typeOfNaN(x) {
  if (Number.isNaN(x)) {
    return 'Number NaN';
  }
  if (isNaN(x)) {
    return 'NaN';
  }
}

console.log(typeOfNaN('100F'));
// Expected output: "NaN"

console.log(typeOfNaN(NaN));
// Expected output: "Number NaN"

 

isNaN()과 Number.isNaN()의 차이

console.log(isNaN('Not a Number')); // true
console.log(Number.isNaN('Not a Number')); // false

둘 다 주어진 값이 NaN이면 true를 반환 공통점이 있지만, NaN을 판별하는 방식이 다르다.

 

isNaN()은 매개변수를 Number로 변환한 뒤 NaN이면 true를 반환하지만, Number.isNaN()은 강제로 매개변수를 숫자로 변환하지 않기 때문에 출력값이 달라진다.

 

 

 

더 자세한 내용은

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/isNaN

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN

 

Comments