JS 내장함수, isNaN

3946 단어 isNaNisNaN

isNaN()

받은 인자값이 NaN, 숫자가 아닌지 판별하는 함수

return

isNaN()안에 들어가는 값이 숫자가 아니면 true, 숫자이면 false를 반환하게 된다.

예시

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

isNaN(true);      // false
isNaN(null);      // false
isNaN(37);        // false

// 문자열
isNaN("37");      // false

의외의 결과

예시에서 보면 null"37"은 예상치못한 결과가 나온다.

isNaN()은 숫자가 아니면 true를 반환해야하는데 둘다 false,즉 number라고 나온다.
typeof로 자료형을 알아보자

typeof null // object
typeof "37" // string

typeof의 결과를 보면 null은 object, "37"은 string이 나온다.
즉, number가 아니기 때문에 true가 나와야 정상이다.

어찌된 일인가...

이유

이것은 isNaN()의 동작방식 때문이다.

null과 "37"를 Number()을 이용해서 숫자로 명시적 형변환을 해보자

Number(null) // 0
Number("37") // 37

typeof Number(null) // number
typeof Number("37") // number

Number()로 숫자로 변화해주고 typeof로 타입을 확인해주면 둘다 number가 나온다.

즉, isNaN()은 받은 값을 먼저 number로 형변환을 해준 뒤, 숫자가 아닌지 판별하는 것이다.

마무리

isNaN()은 받은 값(인수)를 number로 변환한 뒤 판별하는 것이란걸 알았다. 그렇기 때문에 isNaN()보다는 직접 typeof로 타입을 확인하는 것이 더 정확할 것 같다.

좋은 웹페이지 즐겨찾기