JS 내장함수, isNaN
isNaN()
받은 인자값이 NaN, 숫자가 아닌지 판별하는 함수
return
받은 인자값이 NaN, 숫자가 아닌지 판별하는 함수
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로 타입을 확인하는 것이 더 정확할 것 같다.
Author And Source
이 문제에 관하여(JS 내장함수, isNaN), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ahngh/isNaN저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)