12-5. Global 오브젝트 / NaN, 유한대 체크 함수
isNaN()
구분 | 데이터(값) |
---|---|
파라미터 | 값 |
반환 | true, false |
- 값의 NaN 여부 반환
숫자 값이 아니면 true 반환
console.log(isNaN("ABC")); // true console.log(isNaN()); // true
- 값이 String 타입이므로 true 반환
- 파라미터를 작성하지 않으면 undefined와 같음
숫자 값이면 false 반환
값이 숫자로 변환되면 숫자로 인식
console.log(isNaN(123)); // false console.log(isNaN("123")); // false console.log(isNaN(null)); // false
- String 타입이라도 값이 숫자이면 숫자로 인식
- null을 숫자로 변환하면 0
NaN === NaN 결과는 false
- 설계 실수
ES6의 Object.is() 사용
console.log(NaN === NaN); // false console.log(Object.is(NaN, NaN)); // true
NaN과 NaN을 비교하는데 false가 나오면 이는 문제가 될 수 있습니다.
NaN을 비교할 땐Object.is()
함수를 사용하는 것이 안전합니다.
NaN === NaN은 false가 나옵니다.
이는 설계 실수입니다.
true가 나오도록 해야되는데 false가 나오도록 한겁니다.
이거 관련해서 개발자들 사이에서도 말이 많습니다.
그런데 ES6의 Object.is()
함수를 사용하면, NaN과 NaN을 비교할 때, true
가 반환됩니다.
isFinite()
구분 | 데이터(값) |
---|---|
파라미터 | 값 |
반환 | true, false |
값이 Infinity, NaN이면
- false 반환
아니면 즉, finite(유한)이면 true 반환
// NaN console.log(isFinite(0 / 0)); // false // Infinity console.log(isFinite(1 / 0)); // false console.log(isFinite("ABC")); // false
값이 숫자로 변환되면 숫자로 인식
console.log(isFinite(123)); // true console.log(isFinite("123")); // true console.log(isFinite(false)); // true
false는 0으로 변환됩니다.
0은 유한한 수이므로 true가 반환됩니다.