
isNaN은 “is Not a Number”의 약자로, “숫자가 아님”을 검사하는 메서드다. 하지만 이 작명은 직관적이지 않은 문제가 있다.
// 긍정문 (이해하기 쉬움)
typeof 123 === 'number'
// 부정문 (헷갈림)
isNaN(123) // "숫자가 아님"을 검사
isNaN(123) // false (숫자가 '숫자가 아님'을 검사 → 숫자가 맞다)
isNaN('abc') // true (문자라서 숫자가 아님)
Number.isNaN('abc') // false (NaN이 아님)
isNaN(undefined) // true
Number.isNaN(undefined) // false
// ES2015의 Number.isNaN
Number.isNaN(123) // false (NaN이 아님)
Number.isNaN('abc') // false (NaN이 아님)
Number.isNaN(undefined) // false (NaN이 아님)
Number.isNaN(NaN) // true (NaN임)
ES2015부터는 Number.isNaN이 도입되었다.
두 메서드의 핵심 차이
// ✅ 좋은 예
if (Number.isNaN(value)) {
console.log('이 값은 NaN입니다');
}
Number.isFinite()isNaN은 이름과 동작이 직관적이지 않음Number.isNaN은 더 명확하고 예측 가능한 결과 제공Number.isNaN 사용을 권장