NaN값에 대해

joon·2025년 2월 3일
0

NaN(Not-a-Number)의 개념 정리

1️⃣ NaN은 자바스크립트에서 "숫자(Number) 타입이지만, 의미 있는 숫자가 아닌 값"을 나타냄.

  • 즉, 수학적으로 정의되지 않은 연산의 결과 또는 숫자로 변환할 수 없는 값NaN이 됨.

2️⃣ NaN의 기본 속성

  • typeof NaN === "number"NaN숫자(Number) 타입임.
  • 하지만, 연산할 수 없는 숫자값이기 때문에 어떤 수학 연산을 해도 NaN을 반환함.

어떻게 NaN이 발생하는가?

📌 NaN은 보통 다음과 같은 상황에서 발생해.

  1. 숫자로 변환할 수 없는 연산을 수행할 때

    let x = 100 / "Apple"; // NaN ("Apple"은 숫자로 변환 불가능)
    let y = Math.sqrt(-1); // NaN (음수의 제곱근은 실수에서 정의되지 않음)
    let z = parseInt("hello"); // NaN ("hello"는 숫자로 변환 불가능)
  2. NaN이 포함된 연산은 결과도 NaN

    NaN + 5  // NaN
    NaN * 2  // NaN
    NaN / 2  // NaN
  3. undefined를 숫자로 변환하려고 하면 NaN

    let a;
    console.log(a + 10); // NaN (a가 정의되지 않음)

NaN의 특이한 성질

1️⃣ NaN은 자기 자신과 같지 않다.

console.log(NaN === NaN); // false
  • NaN은 모든 값과 비교했을 때 false가 나옴(심지어 자기 자신과도 다름).
  • 따라서 NaN을 판별하려면 ===을 쓰지 말고 isNaN()을 사용해야 함.

2️⃣ isNaN()을 사용하여 NaN 여부 확인 가능.

isNaN(NaN); // true
isNaN(10); // false
isNaN("hello"); // true ("hello"를 숫자로 변환하려다 실패했기 때문)

3️⃣ 더 정확한 판별을 위해 Number.isNaN()을 사용할 것!

Number.isNaN("hello"); // false ("hello"는 애초에 `NaN`이 아님)
isNaN("hello"); // true ("hello"가 `NaN`으로 변환됨)
  • isNaN()문자열도 숫자로 변환하려고 시도한 후 NaN인지 확인하기 때문에 "hello"처럼 변환 불가능한 값도 true를 반환함.
  • Number.isNaN()실제 값이 NaN인지 여부만 확인하기 때문에 "hello"false가 됨.

자바스크립트의 NaN을 다룰 때 주의할 점

1️⃣ NaN이 포함된 연산은 무조건 NaN이 됨.

  • 따라서 NaN이 들어갈 가능성이 있는 연산을 하기 전에 먼저 isNaN()을 사용하여 체크하는 것이 좋음.

2️⃣ + 연산자는 숫자를 문자열로 변환할 수 있음.

NaN + "5"  // "NaN5" (`NaN`이 문자열로 변환됨)
  • NaN과 문자열을 더하면 NaN이 문자열 "NaN"으로 변환된 후 문자열 결합이 됨.

3️⃣ Number.isNaN()을 사용하여 정확한 NaN 판별을 할 것.

  • isNaN()은 자동 변환이 포함되므로, 예상과 다른 결과가 나올 수 있음.

결론

  • NaN"숫자(Number) 타입이지만, 의미 있는 숫자가 아닌 값"을 나타냄.
  • NaN이 포함된 수학 연산은 무조건 NaN이 됨.
  • NaN === NaNfalse, isNaN()을 사용해야 함.
  • isNaN()보다는 Number.isNaN()을 사용하는 것이 더 정확함.
  • + 연산자로 NaN과 문자열을 결합하면 NaN이 문자열 "NaN"으로 변환됨.

📌 즉, NaN은 숫자로 취급되지만 실제 연산에서는 숫자로서 의미 없는 값이다! 🚀

0개의 댓글