isNaN() vs Number.isNaN()

들어가기 전

NaN stands for Not a Number

TLTR

isNaN()

넘어오는 argument를 Number로 변환을 시도

Number.isNaN()

주어진 값의 유형이 Number이고, 값이 NaN이면 true 아니면 false

isNaN()

isNaN(1) //false
isNaN(1.23) //false
isNaN('a') //true
isNaN(null) //false
isNaN(undefined) //true

왜 isNaN(null) 는 false로 리턴하나요?

  • typeof null은 object
  • 넘어오는 argument를 Number로 변환을 시도
  • Number(null) // 0
  • isNaN(0) // false

isNaN 예외 케이스

Number(null) // 0
Number('') // 0
Number('   ') // 0
Number(false) // 0
Number({ fun: () => '' }) // 0
isNaN('22') // false 숫자로 변환되기에...
isNaN('22.39') // false

Number.isNaN()

  • Number형에서만 가능. 즉, 주어진 값의 유형이 Number이고, 값이 NaN이면 true 아니면 false
  • 강제로 Number변환 시도 하지 않음
  • ES2015(ES6)에 추가됨
Number.isNaN(NaN) // true
Number.isNaN(null) // false
Number.isNaN(12) // false
Number.isNaN('12') // false
Number.isNaN('12.12') // false
Number.isNaN('') // false

Reference

Number.isNaN()
선비같은 개발자 - 13.isNaN() / Number.isNaN()