ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Section 6. 자바스크립트 Number 객체
    자바스크립트 2023. 3. 31. 10:44

    I. 생성자 함수

    const numObj1 = new Number();
    const numObj2 = new Number(123);
    const numObj3 = new Number(-123.45);
    
    console.log(numObj1, numObj2, numObj3);//Number {0} Number {123} Number {-123.45}

    String 생성자 함수에 이어서 Number 생성자 함수를 살펴보면 위와 같다.

    인자가 없을 시 0이 반환되는 것을 볼 수 있다.

    Number 생성자 함수도 PrimitiveValue를 살펴보면 다음과 같다.

    모두 PrimitiveValue에 원시값이 저장되는 것을 알 수 있다. 

    console.log(
      numObj1.valueOf(),
      numObj2.valueOf(),
      numObj3.valueOf()
    ); //0 123 -123.45

    valueOf를 사용해서 원시값을 반환했다. 

     

    특정 숫자값으로 인식되는 것들을 살펴보면 다음과 같다.

    console.log(
      new Number('-123.4567'),
      new Number('Infinity'),
      new Number(true),
      new Number(false)
    ); //Number {-123.4567} Number {Infinity} Number {1} Number {0}

    NaN

    console.log(
      new Number('1/2'),
      new Number('123ABC'),
      new Number('ABC'),
      new Number('{a: 1, b: 2}'),
      new Number([1, 2, 3])
    ); //Number {NaN} Number {NaN} Number {NaN} Number {NaN} Number {NaN}

    new 없이 사용하면 String과 마찬가지로 Number 함수는 주어진 인자를 숫자로 변환하여 반환한다.

    const num1 = Number('123');
    const num2 = Number('-123.45');
    const num3 = Number(true);
    const num4 = Number(false);
    const num5 = Number(null);
    
    console.log(typeof num1, num1); //number 123
    console.log(typeof num2, num2); //number -123.45
    console.log(typeof num3, num3); //number 1
    console.log(typeof num4, num4); //number 0
    console.log(typeof num5, num5); //number 0

     

    II. 정적 프로퍼티

    1. EPSILON

    (Number 형에서 표현 가능한 1보다 큰 가장 작은 수) - 1 한 것을 말한다.

    부동소수점으로 인한 계산 오차 문제 해결에 사용한다.

    console.log(Number.EPSILON); //2.220446049250313e-16
    
    console.log(0.1 + 0.2); //0.30000000000000004
    
    console.log((0.1 + 0.2) - 0.3 < Number.EPSILON) //true

     

    2. MAX_VALUE, MIN_VALUE

    자바스크립트에서 표현 가능한 가장 큰 수와 작은 수를 반환하는 프로퍼티이다.

    console.log(Number.MAX_VALUE); //1.7976931348623157e+308
    console.log(Number.MIN_VALUE); //5e-324

     

    3. MAX_SAFE_INTEGER, MIN_SAFE_INTEGER

    자바스크립트의 부동소수점 체계에서 안정적으로 나타낼 수 있는 가장 큰 수와 작은 정수를 반환하는 프로퍼티이다.

    console.log(Number.MAX_SAFE_INTEGER); //9007199254740991
    console.log(Number.MIN_SAFE_INTEGER); //-9007199254740991

    더 큰 정수도 표현 자체는 가능하지만 불안정하다. 안전하게 더 큰 정수를 표현하려면 BigInt 타입으로 표현해야 한다.

     

    4. POSITIVE_INFINITY, NEGATIVE_INFINITY

    양과 음의 Infinity를 반환하는 프로퍼티이다.

    console.log(Number.POSITIVE_INFINITY); //Infinity
    console.log(Number.NEGATIVE_INFINITY); //-Infinity

     

    5. NaN

    전역 객체(globalThis)의 NaN과 같은 값을 반환하는 프로퍼티이다.

    console.log(Number.NaN); //NaN

     

    III. 전역 객체에도 있는 메서드들

    a. 동일하지 않음 : isFinite, isNaN

    console.log(
      isFinite(null), // null을 0으로 변환
      Number.isFinite(null)
    ); //true false
    console.log(
      isNaN('abc'), // 숫자타입의 NaN으로 변환
      Number.isNaN('abc') // 숫자타입 자체가 아니므로 false
    ); //true false

    중요한 것은 전역 객체 (globalThis)의 해당 메소드와의 차이는 암묵적 타입 변환을 하지 않는다는 것

     

    b. 동일함 : parseInt, parseFloat

    각각 전역의 동명 메서드들을 가리킨다. parseInt, parseFloat

    console.log(
      Number.parseInt('123.4567'),
      Number.parseFloat('123.4567')
    ); //123 123.4567

     

    2. (안전한) 정수 여부 확인 isInteger, isSafeInteger

    console.log(
      Number.isInteger(123),
      Number.isInteger(123.45)
    ); //true false
    console.log(
      // 암묵적 변환 하지 않음
      Number.isInteger('123'),
      Number.isInteger(true),
      Number.isInteger(Infinity)
    ); //false false false
    console.log(
      Number.isSafeInteger(123),
      Number.isSafeInteger(123.45)
    ); //true false
    console.log(
      Number.isSafeInteger(Number.MAX_SAFE_INTEGER),
      Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)
    ); //true false

     

    IV. 인스턴스 메서드

    값 자체에서 호출시 괄호로 감싸야 한다. 왜냐하면 소수점과 구분이 불가능하기 때문이다.

     

    1. toExponential

    지수 표기법으로 나타내는 문자열을 반환하는 메서드이다. 

    const numInExp = (123.456789).toExponential();
    console.log(
      typeof(numInExp), numInExp
    ); //string 1.23456789e+2

    인자로 자릿수를 제한할 수 있다.

    // 인자로 자릿수 제한
    console.log(
      (123.456789).toExponential(2),
      (123.456789).toExponential(4),
      (123.456789).toExponential(6)
    ); //1.23e+2 1.2346e+2 1.234568e+2

     

    2. toFixed

    최대 인자값으로 주어진 정수 (0~20)만큼 소수점 이하를 반올림하여 문자열로 반환하는 메서드이다.

    console.log(
      // 인자가 없으면 0을 받은 것과 같음
      (111.234567).toFixed(),
      (111.234567).toFixed(0)
    ); //111 111
    
    console.log(
      (111.234567).toFixed(1),
      (111.234567).toFixed(2)
    ); //111.2 111.23
    
    console.log(
      // 반올림
      (111.234567).toFixed(3),
      (111.234567).toFixed(4)
    ); //111.235 111.2346

     

    3. toPrecision

    반올림과 지수 표기법을 사용하여 문자열을 반환하는 메서드이다. 

    console.log(
      // 인자가 없으면 toString처럼 그대로 문자열로 반환
      (1234.56789).toPrecision()
    ); //1234.56789

    인자가 정수부 자릿수보다 적으면 지수로 반환한다.

    console.log(
      (1234.56789).toPrecision(1),
      (1234.56789).toPrecision(2),
      (1234.56789).toPrecision(3)
    ); /1e+3 1.2e+3 1.23e+3
    // 반올림
    console.log(
      (1234.56789).toPrecision(4),
      (1234.56789).toPrecision(6),
      (1234.56789).toPrecision(8)
    ); //1235 1234.57 1234.5679

     

    4. toString

    문자열 값을 반환하는 메서드이다.

    인자 2~36가 주어지면 해당 수의 진수로 표현한다.

    console.log(
      (11).toString(),
      (11).toString(2),
      (11).toString(8),
      (11).toString(16)
    ); //11 1011 13 b

     

Designed by Tistory.