ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [javascript] isNaN() 과 Number.isNaN() 의 차이점
    web 프로그래밍/javascript 2024. 9. 22. 17:13

    자바스크립트에서 숫자 타입인지 확인할 때 isNaN 을 사용했는데 ES6 에서 추가된 Number.isNaN 과 무엇이 다른지 잘 모른상태로 사용하다가 이번에 자바스크립트 기본부터 다시 학습하며 어떤점이 다른지 확인해보았습니다.

     

    isNaNNumber.isNaN은 둘 다 숫자가 NaN(Not-a-Number)인지 여부를 확인하는 함수이지만, 동작 방식검사 범위에서 차이가 있습니다.

    1. isNaN()

    • 전역 함수로, 입력값이 숫자가 아닌 경우에도 내부적으로 암묵적 형 변환을 거쳐 NaN인지 여부를 판단합니다.
    • 즉, 숫자로 변환 가능한지 여부를 먼저 검사하고, 그 결과가 NaN이면 true를 반환합니다.

    동작 방식:

    • 입력값을 먼저 숫자로 변환하고, 변환된 값이 NaN이면 true, 그렇지 않으면 false를 반환합니다.
    console.log(isNaN(NaN));           // true
    console.log(isNaN("hello"));       // true (문자열 "hello"는 숫자로 변환할 수 없으므로 NaN)
    console.log(isNaN(123));           // false (123은 숫자)
    console.log(isNaN("123"));         // false (문자열 "123"은 숫자 123으로 변환 가능)
    console.log(isNaN(true));          // false (true는 숫자 1로 변환 가능)
    console.log(isNaN(undefined));     // true (undefined는 NaN으로 변환됨)

    2. Number.isNaN()

    • ES6(ECMAScript 2015)에 추가된 숫자 전용 메서드로, 입력값이 정확히 NaN인지를 검사합니다.
    • 입력값을 숫자로 변환하지 않고, 그 값이 실제로 NaN인지 여부만을 엄격하게 검사합니다. 즉, 형 변환을 하지 않고 값 자체가 NaN일 때만 true를 반환합니다.

    동작 방식:

    • 입력값이 바로 NaN인지 여부만 검사하고, 그 외에는 false를 반환합니다.
    console.log(Number.isNaN(NaN));           // true (NaN 자체)
    console.log(Number.isNaN("hello"));       // false ("hello"는 NaN이 아님)
    console.log(Number.isNaN(123));           // false (숫자 123은 NaN이 아님)
    console.log(Number.isNaN("123"));         // false (문자열 "123"은 NaN이 아님)
    console.log(Number.isNaN(true));          // false (true는 NaN이 아님)
    console.log(Number.isNaN(undefined));     // false (undefined는 NaN이 아님)

    차이점 정리 :

    특징isNaN()Number.isNaN()

    암묵적 형 변환 입력값을 숫자로 변환한 후 검사 입력값을 변환하지 않음
    정확성 변환된 값이 NaN이면 true 값이 정확히 NaN일 때만 true
    검사 대상 숫자가 아닌 값도 NaN으로 간주될 수 있음 오직 숫자 값에만 적용, 정확한 NaN 판별
    • isNaN()은 입력값을 숫자로 변환한 뒤에 NaN인지 확인하기 때문에, 숫자가 아닌 값에 대해서도 NaN이라고 판단할 수 있습니다. 따라서, 더 포괄적인 검사를 수행합니다.
    • Number.isNaN()은 값 자체가 정확하게 NaN인지 확인하기 때문에 엄격한 검사를 제공합니다.

    보통 Number.isNaN()을 사용하는 것이 더 명확하고 의도한 대로 동작하므로, 일반적인 상황에서는 Number.isNaN()을 사용하는 것이 권장됩니다.

    댓글

Designed by Tistory.