본문 바로가기

Front-End: Web/JavaScript

[js] NaN(Not A Number)이란? (+isNaN, Number.isNaN)

반응형

정의

  • NaN은 Not a Number, 즉 숫자가 아닌 모든 것을 의미한다.

 

특징

1. 모든 NaN은 같지 않다.

  • NaN은 비교연산자를 사용하면 모두 같지 않게 나온다.
  • 오직 NaN만이 자기 자신과 비교했을 때 같지 않음이 나온다.
NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true

function valueIsNaN(v) { return v !== v; }
valueIsNaN(1);          // false
valueIsNaN(NaN);        // true
valueIsNaN(Number.NaN); // true

 

2. 숫자를 표현하는 문자열도 숫자다.

  • 그러면 숫자로만 구성된 것만 해당되지 않느냐? 하면 그건 또 아니다.
  • 지수(ex. 1e23) 문자열은 숫자로 간주된다.
  • 그래서 isNaN('1e23')은 숫자로 간주되어 false를 반환한다.

 

3.isNaN() Number.isNaN()

  • isNaN() : 1) 현재 값이 NaN이거나, || 2) 숫자로 변환했을 때 NaN인 경우 참
  • Number.isNaN() : 오직 현재 값이 NaN인 경우만 참
isNaN('hello world'); // true
Number.isNaN('hello world'); // false
Number.isNaN(NaN); // true

 

4. 일부 배열 메서드에서는 NaN을 찾을 수 없다.

  • indexOf -> X
  • includes -> O
  • findIndex -> O
let arr = [2, 4, NaN, 12];
arr.indexOf(NaN);                      // -1 (false)
arr.includes(NaN);                     // true
arr.findIndex(n => Number.isNaN(n));   // 2

 


프로그래머스 - 연습문제: '문자열 다루기 기본' 을 풀면서

반응형