NaN
NaN은 Not a Number의 약자로, 숫자가 아니라는 의미이다.
숫자로 변환할 수 없는 값을 변환하려고 할 때나 결과가 숫자가 아니면 NaN을 반환한다.
NaN 사용하기
let str = "123";
typeof(str) // string
let num = Number(str) // 123
typeof(num) // number
Number("abc") // NaN
먼저 NaN을 사용하는 방법을 알아보겠다.
문자열로 감싸진 123의 경우, 숫자로 변환 가능하다.
하지만 abc는 숫자로 변환할 수 없는 값이기에 NaN이라는 결과가 반환된다.
NaN === NaN
NaN === NaN // false
Number("abc") === NaN // false
NaN !== NaN // true
NaN과 NaN을 비교하면 true가 나올 것 같지만, false가 나온다!
자기 자신과도 동등하지 않은 결과가 반환된다.
이는 자바스크립트 자체의 설계 오류라고 한다.
값이 NaN인지 판별하기 위해서는 isNaN이라는 자바스크립트 메서드를 사용할 수 있다.
IsNaN()
값이 NaN인지를 판별하여 true/false 값을 반환한다. 값이 숫자가 맞다면 false를 반환하는 것이다.
isNaN("abc") // true
isNaN("123") // false
isNaN(NaN) // true
Number.isNaN()
Number.IsNaN() 메서드는 ES2015에서 추가되었다. Number.isNaN()은 기존의 isNaN() 메서드보다 더 엄격하게 사용된다. 값의 타입 자체가 number가 아니면 false를 반환한다.
차이점을 알아보자.
isNaN("") // true
Number.isNaN("") // false
isNaN("123") // true
Number.isNaN("123") // false
- ""
Number("")은 NaN이 아닌, 0을 반환한다. 따라서 isNaN으로는 true지만, Number.isNaN에서는 false로 반환된다.
- "123"
123 역시 string 타입이기에 Number.isNaN에서는 타입 검증에 따라 false로 판별된다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/isNaN
'Front-end > JavaScript' 카테고리의 다른 글
[JS] 모듈 export, import 사용하기 (0) | 2023.03.19 |
---|---|
[JS] Map 객체 (Map Object) 알아보기 (0) | 2023.03.13 |
[JS] 2진수, 8진수, 16진수, 10진수 변환하기 (2) | 2023.03.10 |
[JS] arguments 객체 | 나머지 매개변수 (0) | 2023.03.06 |
[JS] 매개변수(parameter)와 인자(argument)의 차이 (0) | 2023.03.03 |