NaN
Not-A-Number(숫자가 아님)을 나타내는 전역 객체의 속성이다. Number.NaN의 값과 같다.
NaN을 반환하는 경우는 다음과 같다.
- 숫자로서 읽을 수 없는 경우 ex) parseInt('blahblah'), Number(undefined)
- 결과가 허수인 수학 계산식 ex) Math.sqrt(-1)
- 피연산자가 NaN인 경우 ex) (7 ** NaN)
- 정의할 수 없는 계산식 ex) (0 * Infinity)
- 문자열을 포함하면서 덧셈이 아닌 계산식 ex) ("안녕" / 3)
isNaN(value)과 Number.isNaN(value)은 value가 NaN인지 판별할 때 쓰인다
isNaN('hello world'); // true
Number.isNaN('hello world'); // false
- isNaN()
- 인자로 들어온 값이 NaN이거나, 값을 숫자로 변환했을 때 NaN이면 참(true)을 리턴한다.
- 이렇듯 isNaN()은 인자를 숫자로 변환하는 과정을 거쳐 판별한다.
- Number.isNaN()
- 인자로 들어온 값이 NaN이어야만 참(true)을 리턴한다.
isNaN()에서는 인자를 Number로 변환한 뒤, NaN이면 true를 리턴하기 때문에 isNaN('hello world')의 경우 true이다.
Number.isNaN()에서는 false를 리턴한다. 왜냐하면 문자열은 숫자가 아닌 건 맞지만, 그 자체로 NaN이 아니기 때문이다. 문자열인 'hello world'은 그 자체로는 NaN이 아니다.