isNaN

ljjunh·2024년 11월 11일

clean-code-javascript

목록 보기
10/38
post-thumbnail

isNaN의 혼란스러운 점⚠️

isNaN은 “is Not a Number”의 약자로, “숫자가 아님”을 검사하는 메서드다. 하지만 이 작명은 직관적이지 않은 문제가 있다.

1. 직관적이지 않은 작명 🏷️

// 긍정문 (이해하기 쉬움)
typeof 123 === 'number'

// 부정문 (헷갈림)
isNaN(123)  // "숫자가 아님"을 검사

2. 예측하기 어려운 결과 😕

isNaN(123)             // false (숫자가 '숫자가 아님'을 검사 → 숫자가 맞다)
isNaN('abc')           // true (문자라서 숫자가 아님)
Number.isNaN('abc')    // false (NaN이 아님)
isNaN(undefined)       // true
Number.isNaN(undefined) // false

3. ES2015의 개선안: Number.isNaN 💡

// 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이 도입되었다.

두 메서드의 핵심 차이

  1. isNaN
    1. 값이 숫자로 변환했을 때 NaN이 되는지 검사
    2. 암묵적 형변환 발생
    3. 더 느슨한 검사
  2. Number.isNaN
    1. 값이 정확히 NaN인지만 검사
    2. 형변환 없음
    3. 더 엄격한 검사

4. 권장사항 📌

  1. 가능한 Number.isNaN 사용하기
// ✅ 좋은 예
if (Number.isNaN(value)) {
    console.log('이 값은 NaN입니다');
}
  1. 목적에 맞는 메서드 선택
    1. NaN 여부만 확인하고 싶다면 → Number.isNaN
    2. 숫자로 변환 가능한지 확인하고 싶다면 → 다른 방법 사용 ex)Number.isFinite()

정리 📝

  • isNaN은 이름과 동작이 직관적이지 않음
  • Number.isNaN은 더 명확하고 예측 가능한 결과 제공
  • 모던 JavaScript에서는 Number.isNaN 사용을 권장
profile
Hello

0개의 댓글