Infinity와 NaN은 JavaScript에서 숫자를 다룰 때 발생하는 특수한 값을 나타냅니다.
Infinity & NaN
1. Infinity (무한대)
ㅇ Infinity는 무한대를 나타냅니다.
ㅇ 어떤 숫자를 0으로 나눌 때 또는 어떤 양수를 무한히 더하거나 빼는 경우에 발생합니다.
ㅇ 예를 들어, 10 / 0 또는 Number.POSITIVE_INFINITY와 같은 연산은 Infinity를 반환합니다.
ㅇ 무한대와 어떤 숫자를 더하면 무한대이며, 무한대에서 어떤 숫자를 빼도 무한대입니다.
2. NaN (숫자가 아님)
ㅇ NaN은 "Not-a-Number"의 약어로, 숫자가 아닌 값을 나타냅니다.
ㅇ 수학 연산 중 예상치 못한 결과가 발생했을 때 생성됩니다.
ㅇ 예를 들어, 문자열을 숫자로 변환하려고 할 때 문자열 중 숫자로 해석할 수 없는 문자가 있거나, 0으로 나누려고 시도한 경우 NaN이 발생합니다.
ㅇ NaN은 숫자와의 비교 결과로 항상 false를 반환합니다. 따라서 NaN과의 비교를 통해 NaN 여부를 확인할 수 있습니다.
발생원인
<script>
var result = 10 / 0; // Infinity
console.log(result);
var result = -5 / 0; // -Infinity
console.log(result);
var result = Number.POSITIVE_INFINITY + 100; // Infinity
console.log(result);
var stringValue = "abc";
var numericValue = parseInt(stringValue); // NaN
console.log(numericValue);
var result = 0 / 0; // NaN
console.log(result);
var stringValue = "abc123";
var numericValue = parseFloat(stringValue); // NaN
console.log(numericValue);
</script>
Infinity 발생원인
ㅇ 양수를 무한대로 나누는 경우
ㅇ 음수를 0으로 나누는 경우
ㅇ 양수를 무한히 더하는 경우
NaN 발생원인
ㅇ 문자열을 숫자로 변환할 때 실패하는 경우
ㅇ 0으로 나누려고 시도하는 경우
체크 / 예외처리
<script>
var result = 10 / 0; // Infinity
if (isFinite(result)) {
console.log("결과:", result);
} else {
console.log("무한대 발생! 대체값을 사용합니다.");
result = 0; // 대체값 설정
console.log("대체값:", result);
}
var result = -5 / 0; // -Infinity
if (isFinite(result)) {
console.log("결과:", result);
} else {
console.log("무한대 발생! 대체값을 사용합니다.");
result = 0; // 대체값 설정
console.log("대체값:", result);
}
var result = Number.POSITIVE_INFINITY + 100; // Infinity
if (isFinite(result)) {
console.log("결과:", result);
} else {
console.log("무한대 발생! 대체값을 사용합니다.");
result = 0; // 대체값 설정
console.log("대체값:", result);
}
var stringValue = "abc";
var numericValue = parseInt(stringValue); // NaN
if (isNaN(numericValue)) {
console.log("숫자로 변환할 수 없는 문자열입니다. 대체값을 사용합니다.");
numericValue = 0; // 대체값 설정
console.log("대체값:", numericValue);
} else {
console.log("숫자로 변환된 값:", numericValue);
}
var result = 0 / 0; // NaN
if (isNaN(result)) {
console.log("계산 불가능한 수학 연산입니다. 대체값을 사용합니다.");
result = 0; // 대체값 설정
console.log("대체값:", result);
}
var stringValue = "abc123";
var numericValue = parseFloat(stringValue); // NaN
if (isNaN(numericValue)) {
console.log("숫자로 변환할 수 없는 문자열입니다. 대체값을 사용합니다.");
numericValue = 0; // 대체값 설정
console.log("대체값:", numericValue);
} else {
console.log("숫자로 변환된 값:", numericValue);
}
</script>
● isFinite() 함수
- isFinite() 함수는 주어진 값이 유한한 숫자인지 여부를 확인하는 데 사용됩니다.
- 인자로 받은 값이 유한한 숫자이면 true를 반환하고, 무한대(Infinity)나 음의 무한대(-Infinity) 또는 NaN이면 false를 반환합니다.
- isFinite()는 숫자, Infinity, -Infinity, NaN, 문자열 등 모든 값에 대해 동작합니다.
- 주로 수학 연산 결과의 유효성을 검사하거나 숫자가 NaN이 아닌지를 확인할 때 사용됩니다.
console.log(isFinite(42)); // true
console.log(isFinite(-Infinity)); // false
console.log(isFinite("42")); // true (문자열이 숫자로 변환됨)
console.log(isFinite(NaN)); // false
● isNaN() 함수
- isNaN() 함수는 주어진 값이 NaN인지 여부를 확인하는 데 사용됩니다.
- 인자로 받은 값이 NaN이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
- isNaN()은 주로 숫자로 변환할 수 있는 문자열을 숫자로 변환하기 전에 숫자로 변환 가능한지를 확인할 때 사용됩니다.
- 주의해야 할 점은, isNaN()은 NaN이 아닌 값을 NaN으로 변환하기 전에 먼저 문자열로 변환합니다. 따라서 "42"와 같은 문자열은 true를 반환합니다.
console.log(isNaN(42)); // false
console.log(isNaN("42")); // false (문자열이 먼저 숫자로 변환됨)
console.log(isNaN(NaN)); // true
console.log(isNaN("abc")); // true (문자열이 숫자로 변환되지 못함)
'개발이야기 > 자바스크립트' 카테고리의 다른 글
[자바스크립트] JSON.stringify(), JSON.parse() 사용해서 JSON 데이터 변환하기 (예제, 사용법) (0) | 2023.10.04 |
---|---|
[자바스크립트] sort()를 활용해서 배열 정렬하기 (사용법, 예제) (2) | 2023.10.04 |
[자바스크립트] 우클릭 방지 이벤트 등록, 해제하기 (사용법, 예제) (0) | 2023.09.21 |
[자바스크립트] HTML요소 텍스트를 클립보드로 복사하기 (navigator.clipboard) (0) | 2023.09.20 |
[자바스크립트] userAgent 사용해서 브라우저, 디바이스 정보 확인하기 (버전, PC, 모바일, OS, IOS) (0) | 2023.09.18 |
댓글