이력

  • 2021.10.05 포스팅
  • 2021.11.26 사소한 수정

모든 내용을 상세히 담으려 하지 않았습니다.
제가 모르는 부분이나, “이런 것도 있었어?” 하는 부분, 중요하다고 생각되는 부분,
다시 한번 되새기고 싶은 부분만 기록했습니다.
읽어주셔서 감사합니다.

9.1 프로퍼티 리스트

9.2 Object 분류

  • 오브젝트
    • var obj = {name: “Jaejin”};
  • 빌트인 오브젝트
    • 렌더링 과정에서 자바스크립트가 생성하는 오브젝트
    • Global, Object, Function, Array, String, Boolean, Number, Number, Math, Date, RegExp, JSON, Error(EvalError, RangeError …)
  • 네이티브 오브젝트
    • 빌트인 오브젝트에서 Arguments 오브젝트와 같이 js 프로그램을 실행할 때 생성되는 오브젝트
    • 스펙에 명시적으로 나와있다.
  • 호스트 오브젝트
    • js 실행 환경을 보완, 지원하기 위해 호스트 환경에서 제공하는 오브젝트
    • 네이티브 오브젝트를 제외한 오브젝트
    • DOM 오브젝트

9.3 new Object()

구분타입데이터(값)
파라미터값(옵션)
반환Object생성한 오브젝트
  • 파라미터에 지정한 데이터 타입에 따라 생성되는 인스턴스 타입이 달라진다.
  • 파라미터에 인스턴스를 지정하면 인스턴스를 생성하지 않고 파라미터에 지정한 인스턴스를 반환한다.
  • 인스턴스를 생성하면서 파라미터에 지정한 값을 인스턴스의 내부 프로퍼티인 [[PrimitiveValue]]에 설정한다.(Object 오브젝트는 [[PrimitiveValue]]를 사용하지 않는다. 그리고 내부 프로퍼티는 외부에서 접근 불가능하다)
  • 파라미터에 호스트 오브젝트를 지정하면 그대로 반환한다. 오브젝트 리터럴 {} 로 생성가능하며, protytype은 존재하지 않는다.

9.4 Object()

  • 함수와 메소드의 차이
    • 함수 : Object에 연결된 프로퍼티에서 타입이 Function 인 것
    • 메소드 : Object.prototype에 연결된 프로퍼티에서 타입이 Function 인 것

9.5 문자열 표시 반환, toString()

  • 오브젝트 타입을 문자열 표시 형태로 변환하여 반환한다.
구분타입데이터(값)
objectObjectObject 인스턴스
파라미터지정불가
반환String문자열 표시 형태
  • 다음의 예제를 보면 어떤식으로 동작하는 하는지 확인할 수 있다,
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
js.log(Object().toString());
// [object Object]

var obj = new Object();
js.log(obj.toString.call(new Number()));
// [object Number]
js.log(obj.toString.call(undefined));
// [object Undefined]
js.log(obj.toString.call(null));
// [object Null]
  • 이것을 활용하면 다양한 오브젝트를 판별하 수 있다.

9.6 지역화 문자로 변환, toLocaleString()

구분타입데이터(값)
objectObject오브젝트
파라미터사용하지 않음
반환String변환값
  • Object 오브젝트는 값이 없으므로 지역화 변환 대상이 아니지만, Object를 상속받는 다른 오브젝트들이 메소드 호출시 메소드가 없으면 에러가 발생하므로 정의되어 있다.
  • 오브젝트의 프리미티브 값을 반환한다., 프리미트가 없는 오브젝트는 오브젝트를 반환한다,
  • Object 오브젝트는 프리미티브 값이 없어 반환할 수 없지만, Object를 상속받는 다른 오브젝트들이 메소드 호출시 에러가 발생하지 않도록 하기 위해 정의되어 있다.

9.7 프리미티브 값 반환, valueOf()

  • 오브젝트의 프리미티브 값을 반환한다., 프리미트가 없는 오브젝트는 오브젝트를 반환한다,
  • Object 오브젝트는 프리미티브 값이 없어 반환할 수 없지만, Object를 상속받는 다른 오브젝트들이 메소드 호출시 에러가 발생하지 않도록 하기 위해 정의되어 있다.

9.8 프로퍼티 소유 여부, has이력

  • prototype 프로퍼티는 고려하지 않는다.
  • prototype chain = 인스턴스 연결 = 상속
    • prototype에 오브젝트를 연결하는 것과 인스턴스를 연결하는 것은 다르다. 오브젝트 연결은 {name: value} 형태를 연결한 것이고 인스턴스 연결은 new 연산자로 생성한 인스턴스를 연결한 것이다.
    • 오브젝트 연결은 연결이고, 인스턴스 연결은 상속이다.

9.9 prototype에 오브젝트 존재 여부, isProtoytpeOf()

구분타입데이터(값)
objectObject비교할 오트젝트(인스턴스)
파라미터Object비교 기준 인스턴스
반환Booleantrue, false
1
2
3
4
5
6
7
8
var obj = new Object();
js.log(Object.prototype.isPrototypeOf(obj));
// true, prototype은 공유되기 때문에 동일해서 true

js.log(Object.isPrototypeOf(obj));
// false, Object 전체를 비교하면 다르기 때문에 false
js.log(obj instanceof Object);
// true

9.10 프로퍼티 열거 가능 여부(propertyIsEnumerable 메소드)

  • prototype에 연결된 프로퍼티는 대상이 아니다.
  • 내부 프로퍼티 [[Enumerable]]에 설정되며, 외부에서 enumerable 속성을 사용해 변경할 수 있다.