LHJ

I'm a FE developer.

10-3. Object 오브젝트(ES3 기준) / Object 인스턴스 생성, 프리미티브 값 구하기

26 Nov 2020 » js_beginner

10-3. Object 오브젝트(ES3 기준) / Object 인스턴스 생성, 프리미티브 값 구하기

new Object()

구분데이터(값)
파라미터값opt
반환생성한 인스턴스

  • 인스턴스를 생성하여 반환
  • 파라미터의 데이터 타입에 따라

    • 생성할 인스턴스 결정

        var newNum = new Number(123);
        console.log(typeof newNum); // number
        console.log(newNum + 100); // 223
      
      1. new Number(123)로 생성한 인스턴스 타입은 object이며 프리미티 값은 123
        var newObj = new Object(123);
        console.log(typeof newObj); // object
        console.log(newObj + 100); // 223
      
      1. new Object(123)로 생성한 인스턴스의 타입도 object이고 프리미티 값은 123
      2. 2개 인스턴스 모두 100을 더할 수 있으며 값이 더해진다는 것은 Number 타입이라는 것
      3. new Object()는 파라미터 값 타입이
        Number 타입이면 Number 인스턴스를 생성하고
        String 타입이면 String 인스턴스를 생성

      • 빌트인 Object 오브젝트와 다른 빌트인 오브젝트와의 차이점
      • new Number()는 Number 타입 인스턴스 생성
      • new String()은 String 타입 인스턴스 생성

      원래 Object는 { key: value } 형태의 프로퍼티입니다.
      그런데 newObj+100 이 223 출력.
      newObj 프리미티브 값으로 123이 설정되었고, 이것의 타입은 Number 타입이라는 겁니다.
      즉, newObj는 Number 인스턴스인 겁니다.
      이와같이 new Object()는 파라미터 값에 따라서 인스턴스가 결정됩니다.


  • 파라미터 값이 undefined, null이면

    • 빈 Object 인스턴스 반환
      var newObj = new Object();
      console.log(newObj); // {}
    
    1. new Object()처럼 파라미터를 작성하지 않으면 undefined를 작성한 것과 같으며 값을 갖지 않은 Object 인스턴스 생성
      {}는 Object의 프리미티브 디폴트 값입니다.

Object()

구분데이터(값)
파라미터값opt
반환생성한 인스턴스

  • Object 인스턴스 생성 new 연산자를 사용하지 않은것 뿐, new 있을 때와 없을 때 파라미터에서만 좀 차이있는거같음 - 아니네, 그냥 똑같음 차이점없음

    • 파라미터는 { key(name) : value } 형태
      var obj = Object({ name : "JS책" });
      console.log(obj); // {name: "JS책"} <- 파라미터로 작성된 값이 인스턴스의 프리미티브 값이 됨
        
      var emptyObj = Object();
      console.log(emptyObj); // {}
    
    1. 파라미터를 작성하지 않으면 new Object()와 같음

Object 생성 방법

  • var abc = {};

    • var abc = Object() 와 같음
    • 즉, var abc = {}을 실행하면
      Object 인스턴스가 생성됨
      var obj = Object({ name : "value" });
      console.log(obj); // {name: "value"}
      console.log(obj instanceof Object); // true
    
    1. true가 출력된 것은 Object로 생성한 인스턴스라는 것을 뜻합니다.
      var obj = {name: "value"};
      console.log(obj); // {name: "value"}
      console.info(obj instanceof Object); // true
    
    1. true가 출력된 것은 Object로 생성한 인스턴스라는 것을 뜻합니다.
    2. Object()와 Object 리터럴{} 모두 Object 인스턴스를 생성합니다.
    3. 그래서 Object()를 사용하지 않고 간단하게 {}를 사용합니다.

    그래서 보통 자바스크립트 개발자들은 {} 중괄호를 사용해서 빌트인 오브젝트 오브젝트 인스턴스를 만듭니다.


  • {} 표기를

    • 오브젝트 리터럴(Literal)이라고 부름

valueOf()

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

  • data 위치에 작성한 Object 인스턴스의 프리미티브 값 반환

      var obj = { key : "value" };
      console.log(obj.valueOf()); // {key:"value"}
    
    1. obj에 프리미티브 값으로 설정된 값 반환