비전공자 개발일기

Javascript NaN 본문

Javascript

Javascript NaN

HiroDaegu 2021. 9. 1. 00:26
728x90
SMALL

NaN(Not a Number)

  • 전역 객체의 속성(전역 스코프의 변수)
  • 초기값은 Not-A-Number로, Number.NaN과 같음 
  • 최신 브라우저에서 NaN은 설정 불가, 쓰기 불가 속성
  • NaN을 반환하는 연산
    • 숫자로서 읽을 수 없는 경우 (parseInt("어쩌구"), Number(undefined))
    • 결과가 허수인 수학 계산식 (Math.sqrt(-1))
    • 피연산자가 NaN  (7 ** NaN)
    • 정의할 수 없는 계산식 (0 * Infinity)
    • 문자열을 포함하면서 덧셈이 아닌 계산식 ("가" / 3)
  • NaN은 다른 모든 값과 비교(==, !=, ===, !==)했을 때 같지 않으며, 다른 NaN과도 같지 않음(어떠한 연산을 해도 결과 값은 false)
  • 판별: Number.isNaN(value) or isNaN(value) -> isNaN은 현재 값이 NaN이거나 숫자로 변환했을 때 NaN이 되면 참을 반환, Number.isNan은 현재 값이 NaN이어야만 참을 반환
    • Number.isNaN(NaN);        // true
      Number.isNaN(Number.NaN); // true
      Number.isNaN(0 / 0)       // true
      
      // 예를 들면 이들은 global isNaN()으로는 true가 됐을 것임
      Number.isNaN("NaN");      // false
      Number.isNaN(undefined);  // false
      Number.isNaN({});         // false
      Number.isNaN("blabla");   // false
      
      // 모두
      Number.isNaN(true);
      Number.isNaN(null);
      Number.isNaN(37);
      Number.isNaN("37");
      Number.isNaN("37.37");
      Number.isNaN("");
      Number.isNaN(" ");
    • function increment(x) {
        if (isNaN(x)) x = 0;
        return x + 1;
      };
      
      // Number.isNaN()과 같은 효과:
      function increment(x) {
        if (Number.isNaN(Number(x))) x = 0;
        return x + 1;
      };
      
      // 함수의 인수 x에 대해 다음 경우에,
      // isNaN(x)는 항상 거짓, x가 실제 숫자가 아닐지라도
      // 하지만 산술 식에 그대로
      // 사용될 수 있습니다
      increment("");            // 1: ""는 0으로 변환됩니다
      increment(new String());  // 1: 빈 문자열을 나타내는 String 객체는 0으로 변환됩니다
      increment([]);            // 1: []는 0으로 변환됩니다
      increment(new Array());   // 1: 빈 배열을 나타내는 Array 객체는 0으로 변환됩니다
      increment("0");           // 1: "0"은 0으로 변환됩니다
      increment("1");           // 2: "1"은 1로 변환됩니다
      increment("0.1");         // 1.1: "0.1"은 0.1로 변환됩니다
      increment("Infinity");    // Infinity: "Infinity"는 Infinity로 변환됩니다
      increment(null);          // 1: null은 0으로 변환됩니다
      increment(false);         // 1: false는 0으로 변환됩니다
      increment(true);          // 2: true는 1로 변환됩니다
      increment(new Date());    // 밀리초로 현재 date/time + 1을 반환합니다
      
      // 함수의 인수 x에 대해 다음 경우에,
      // isNaN(x)는 항상 거짓이고 x는 실제로 숫자입니다
      increment(-1);            // 0
      increment(-0.1);          // 0.9
      increment(0);             // 1
      increment(1);             // 2
      increment(2);             // 3
      // ... 등등 ...
      increment(Infinity);      // Infinity
      
      // 함수의 인수 x에 대해 다음 경우에,
      // isNaN(x)는 항상 참이고 x는 실제로 숫자가 아닙니다,
      // 따라서 함수는 인수를 0으로 대체하고 1을 반환합니다
      increment(String);            // 1
      increment(Array);             // 1
      increment("blabla");          // 1
      increment("-blabla");         // 1
      increment(0/0);               // 1
      increment("0/0");             // 1
      increment(Infinity/Infinity); // 1
      increment(NaN);               // 1
      increment(undefined);         // 1
      increment();                  // 1
      
      // isNaN(x)는 항상 isNaN(Number(x))과 같지만,
      // x의 존재는 여기서 필수입니다!
      isNaN(x) == isNaN(Number(x)) // x == undefined 포함 x의 어떤 값도 참,
                                   // isNaN(undefined) == true 및 Number(undefined)가 NaN을 반환하기에,
                                   // 하지만 ...
      isNaN() == isNaN(Number())   // 거짓, isNaN() == true 및 Number() == 0 때문에
  • NaN만이 자기 자신과 비교했을 때 같지 않음을 이용할 때에도 사용

 

728x90
LIST

'Javascript' 카테고리의 다른 글

Javascript bubble & selection & insertion sort  (0) 2021.09.05
Javascript For loop - tree  (0) 2021.09.04
HTML JAVASCRIPT Select option Multiple  (0) 2021.08.27
Javascript Clock  (0) 2021.08.26
Javascript Login with LocalStorage  (0) 2021.08.25