개발이야기/자바스크립트

[자바스크립트] Infinity&NaN 해결하기, 체크, 예외처리, 발생원인

후린개발자 2023. 9. 25.
반응형

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>

 

console.log 결과

 

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 (문자열이 숫자로 변환되지 못함)

 

 

 

 

console.log 결과

 

반응형

댓글

💲 추천 글