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
은 숫자로 취급되지만 실제 연산에서는 숫자로서 의미 없는 값이다! 🚀