이력
- 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()#
- 오브젝트 타입을 문자열 표시 형태로 변환하여 반환한다.
구분 | 타입 | 데이터(값) |
---|
object | Object | Object 인스턴스 |
파라미터 | | 지정불가 |
반환 | 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()#
구분 | 타입 | 데이터(값) |
---|
object | Object | 오브젝트 |
파라미터 | | 사용하지 않음 |
반환 | String | 변환값 |
- Object 오브젝트는 값이 없으므로 지역화 변환 대상이 아니지만, Object를 상속받는 다른 오브젝트들이 메소드 호출시 메소드가 없으면 에러가 발생하므로 정의되어 있다.
- 오브젝트의 프리미티브 값을 반환한다., 프리미트가 없는 오브젝트는 오브젝트를 반환한다,
- Object 오브젝트는 프리미티브 값이 없어 반환할 수 없지만, Object를 상속받는 다른 오브젝트들이 메소드 호출시 에러가 발생하지 않도록 하기 위해 정의되어 있다.
9.7 프리미티브 값 반환, valueOf()#
- 오브젝트의 프리미티브 값을 반환한다., 프리미트가 없는 오브젝트는 오브젝트를 반환한다,
- Object 오브젝트는 프리미티브 값이 없어 반환할 수 없지만, Object를 상속받는 다른 오브젝트들이 메소드 호출시 에러가 발생하지 않도록 하기 위해 정의되어 있다.
9.8 프로퍼티 소유 여부, has이력#
- prototype 프로퍼티는 고려하지 않는다.
- prototype chain = 인스턴스 연결 = 상속
- prototype에 오브젝트를 연결하는 것과 인스턴스를 연결하는 것은 다르다. 오브젝트 연결은 {name: value} 형태를 연결한 것이고 인스턴스 연결은 new 연산자로 생성한 인스턴스를 연결한 것이다.
- 오브젝트 연결은 연결이고, 인스턴스 연결은 상속이다.
9.9 prototype에 오브젝트 존재 여부, isProtoytpeOf()#
구분 | 타입 | 데이터(값) |
---|
object | Object | 비교할 오트젝트(인스턴스) |
파라미터 | Object | 비교 기준 인스턴스 |
반환 | Boolean | true, 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 속성을 사용해 변경할 수 있다.