
NaN(Not-a-Number)의 개념 정리1️⃣ NaN은 자바스크립트에서 "숫자(Number) 타입이지만, 의미 있는 숫자가 아닌 값"을 나타냄.
NaN이 됨.2️⃣ NaN의 기본 속성
typeof NaN === "number" → NaN은 숫자(Number) 타입임.NaN을 반환함.NaN이 발생하는가?📌 NaN은 보통 다음과 같은 상황에서 발생해.
숫자로 변환할 수 없는 연산을 수행할 때
let x = 100 / "Apple"; // NaN ("Apple"은 숫자로 변환 불가능)
let y = Math.sqrt(-1); // NaN (음수의 제곱근은 실수에서 정의되지 않음)
let z = parseInt("hello"); // NaN ("hello"는 숫자로 변환 불가능)
NaN이 포함된 연산은 결과도 NaN
NaN + 5 // NaN
NaN * 2 // NaN
NaN / 2 // NaN
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 === NaN은 false, isNaN()을 사용해야 함.isNaN()보다는 Number.isNaN()을 사용하는 것이 더 정확함.+ 연산자로 NaN과 문자열을 결합하면 NaN이 문자열 "NaN"으로 변환됨.📌 즉, NaN은 숫자로 취급되지만 실제 연산에서는 숫자로서 의미 없는 값이다! 🚀