ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [표준객체] - Number 객체
    JavaScript/기본 1 2022. 2. 7. 00:52
    • 자바스크립트에서 수 표현
      • // 64비트 부동 소수검 수의 정밀도
        
        var x = 999999999999999; // 15자리 정수부
        var y = 9999999999999999;  // 16자리 정수부
        var z = 0.1 + 0.2;
        
        // x: 999999999999999
        // y: 10000000000000000
        // z: 0.30000000000000004 => 오차
        
        // 정수부는 15자리까지
        // 소수부는 17자리까지 유효
      • // 오차를 없애기 위해 정수의 형태로 먼저 변환하여 계산을 수행하고
        // 다시 실수의 형태로 재변환 방법 사용
        
        var z = (0.2 * 10 + 0.1 * 10) / 10;  // 0.3
    • 진법 표현
      • var x = 0xAB;  // 16진법으로 표현된 10진수 171
        var y = 29;  // 10진법으로 표현된 10진수 29
        
        x + y;   // 200, 모두 10진법으로 자동 변환되어 계산됨
      • var num = 256;
        
        num.toString(2);  // 2진법으로 변환 : 100000000
        num.toString(8);  // 8진법으로 변환 : 400
        num.tooString(10);  // 10진법으로 변환 : 256
        num.toString(16);   // 16진법으로 변환 : 100
        
        // 2진수로 변환한 값을 문자열로 반환
        num.toString(2);  // 100000000
        
        // 문자열을 숫자로 나눴기 때문에 자동으로 10진수로 변환되어 산술 연산된 결과값
        (num.toString(2) / 2);  // 50000000
      • toString( )
        • 해당 숫자의 진법을 실제로 바꿔주는 것이 아닌,
          전달된 진법으로 변환된 형태의 문자열 반환
    • Infinity
      • 양의 무한대 : Infinity
      • 음의 무한대 : -Infinity
      • 수정할 수 없는 읽기 전용 값
      • 어떤 수보다 큰 수로 취급
      • var x = 10 / 0;   // 숫자를 0으로 나누면 Infinity반환
        var y = Infinity * 1000;  // Infinity에 어떠한 수를 산술 연산해도 Infinity반환
        var z = 1 / Infinity  // Infinity의 역수는 0반환
        
        
        document.write(x);  // Infinity
        document.write(y);  // Infinity
        document.write(z);  // 0
    • NaN (Not A Number)
      • 숫자가 아니다, 정의되지 않는 값이나 표현할 수 없는 값
      • var x = 100 - "10";    // "10"은 자동으로 숫자로 변환되어 계산됨
        var y = 100 - "문자열";  // "문자열"은 숫자로 변환할 수 없기 때문에 NaN반환
        var z = 0 / 0;  // 0을 0으로 나눌 수 없기 때문에 NaN을 반환
        
        document.write(x);  // 90
        document.write(y);  // NaN
        document.write(z);  //NaN
      • isNaN( ) => 숫자인지 아닌지 판단
        • var x = 100 * "문자열";
          
          if(isNaN(x)) {  // 전달된 값이 숫자인지 아닌지 검사
              document.write("변수 x의 값은 숫자가 아닙니다.");
          } else {
              document.write("변수 x의 값은 숫자입니다.");
          }
          
          // 변수 x의 값은 숫자가 아닙니다.
    • null, undefined, NaN, Infinity 비교
      • null - object, 아직 '값'이 정해지지 않은 것
      • undefined - 하나의 타입, '타입'이 정해지지 않은 것
      • NaN - number, '숫자가 아님'을 의미
      • Infinity - number, '무한대'를 의미
      • typeof null;  // object
        typeof undefined;  // undefined
        typeof NaN;  // number
        typeof Infinity;  // number
        
        Boolean(null);  // false
        Boolean(undefined);  // false
        Boolean(NaN);  // false
        Boolean(Infinity);  // true
        
        Number(null);  // 0
        Number(undefined);  // NaN
        Number(NaN);  // NaN
        Number(Infinity);  // Infinity
        
        String(null);  // null
        String(undefined);  // undefined
        String(NaN);  // NaN
        String(Infinity);  // Infinity
    • Number 객체
      • new연산자를 사용해 명시적으로 Number객체를 생성할 수 있다.
      • 숫자 값을 감싸고 있는 래퍼(wrapper)객체이다.
      • var x = 100;  // 숫자 리터럴
        var y = new Number(100);  // Number 객체
        
        document.write(x);  // 100
        document.write(y);  // 100
        document.write(type x);  // number
        document.write(type y);  // object
      • var x = 100;  // 숫자 리터럴 100
        var y = new Number(100);  // Number 객체 100
        x == y;  // 값이 같으므로 true
        x === y;  // 서로 다른 객체이므로 false
      • new연산자 사용해서 객체를 생성할 땐 많은 추가 연산을 해야한다.
      • 가능한 숫자 리터럴을 사용해서 수를 표현하고
      • Number객체는 래퍼 객체로만 활용하는 것이 좋다.
Designed by Tistory.