LHJ

I'm a FE developer.

8-5. Number 오브젝트 / 프리미티브 값, 프리미티브 타입, 프리미티브 값 구하기

22 Nov 2020 » js_beginner

48. 프리미티브 값, 프리미티브 타입, 프리미티브 값 구하기

프리미티브 값

  • Primitive Value

    • 언어에 있어 가장 낮은 단계의 값
    • var book = “책”;
      “책”은 더 이상 분해, 전개 불가
window.onload = function () {
    "use strict"

    debugger;

    var book = "";
    var point = 123;

    /*
    1. 오른쪽 local의 book을 보면
    - 값으로 단지 "책"만 갖고 있습니다.
    
    2. point 도 마찬가지입니다.
    
    3. 이것이 프리미티브 값입니다.
    */

    var obj = { book: "" };

    /*
    4. obj 를 펼치면 다른 프로퍼티들이 있습니다.
    - obj 는 프리미티브가 아닙니다.
    */

    var instance = new Number(456);
    /*
    5. 인스턴스의 프리미티브 값 형태
    */
}

book 변수를 더 이상 전개할 수 없습니다.
point 변수도 마찬가지로 전개할 수 없습니다.

위와 같은 형태는 프리미티브 값을 제공하지 않는 형태입니다.

인스턴스 또한 Object 와 비슷하게 프리미티브 값을 제공하지 않는 형태입니다.
하지만 위에 보시면 뭔가 시멘틱 적으로 프리미티브 값이라고 암시하는 것이 있습니다.
[[primitiveValue]] : 456

new Number(456) 에서 456 이라는 primitive 값이 파라미터로 들어갑니다.
그럼 { key : value } 형태로 저장을 해야되는데, key 가 없으므로 자바스크립트 엔진에서 자동으로 key 를 생성한 것입니다.
[[primitiveValue]] 대괄호 두개가 바로 자바스크립트 엔진이 만들었다는 뜻입니다.


  • 프리미티브 타입

    • Number, String, Boolean : 인스턴스 생성 가능
    • Null, Undefined : 인스턴스 생성 불가
    • Object 는 프리미티브 값을 제공하지 않음

인스턴스의 프리미티브 값

  • var obj = new Number(123);

    • 인스턴스를 생성하면
    • 파라미터 값을 인스턴스의 프리미티브 값으로 설정

  • 프리미티브 값을 갖는 오브젝트 [[]]

    • Boolean, Date, Number, String

        var obj = new Number(123); // [[primitiveValue]] : 123
        console.log(obj + 200); // 323
      
      1. new Number(123) 로 인스턴스를 생성하여 obj에 할당한 후 obj에 값을 더하면 값이 더해집니다.
      2. obj가 인스턴스이므로 값을 더할 수 없는데 값이 더해지는 것은
      3. 123을 인스턴스의 프리미티브 값으로 설정하기 때문입니다.
      4. 프리미티브 값을 갖는 인스턴스에 값을 더하면 인스턴스의 프리미티브 값에 값을 더합니다.

valueOf()

구분데이터(값)
dataNumber 인스턴스, 숫자
파라미터사용하지 않음
반환프리미티브 값

  • Number 인스턴스의 프리미티브 [[]] 값 반환

      var obj = new Number("123");
      console.log(obj.valueOf()); // 123
    
    1. obj의 프리미티브 값을 반환합니다.