
자바스크립트의 가장 기본적인 데이터 타입
[이번 장에서 공부할 내용]
객체는 복합된 값이다.
- 객체는 여러가지 값(기본 값이나 다른 객체)을 모아서 이름을 통해 값을 저장하고 가져올 수 있게 한다.
- 객체는 프로퍼티의 순서 없는 집합이며 각 프로퍼티에는 이름과 값이 있다.
- 프로토타입으로 불리는 다른 객체에서 프로퍼티를 상속하기도 한다.
문자열, 숫자, 심벌, true, false, null, undefined가 아닌 값이름과 값이 있다.프로퍼티 이름에는 빈 문자열과 심벌을 포함해 어떤 문자열이든 쓸 수 있다프로퍼티는같은 이름을 가질 수 없다.자체 프로퍼티(own property)라고 부른다.🔔프로퍼티 속성
객체를 생성할 때는 객체 리터럴, new 키워드 또는 Object.create() 함수를 사용한다.
객체 리터럴
let empty = {}; // 프로퍼티가 없는 객체
let point = { x: 0, y: 0 }; // 숫자 프로퍼티 두 개
let p2 = { x: point.x, y: ponint.y+1} // 좀 더 복잡한 값
let book = {
"main title": "JavaScript", // 이 프로퍼티 이름에는 스페이스와 하이폰
"sub-title": "The Definitive Guide", // 들어 있으므로 문자열 리터럴을 썼습니다.
for: "all audiences", // for는 예약어지만 따옴표를 쓰지 않았습니다.
author: { // 이 프로퍼티의 값은
firstname: "David", // 객체입니다.
surname: "Flanagan"
}
};
콤마를 쓸 수 있다.객체가 만들어진다.프로퍼티의 값도 리터럴을 평가할 때마다 평가된다.- new 연산자는 새 객체를 생성하고 초기화한다.
- new 키워드 뒤에는 반스기 함수 호출이 있어야 한다.
- 생성자라 부르고, 새로 생성된 객체를 초기화하는 목적으로 사용한다.
let 0 = new Object(); // 빈 객체를 만든다. {}와 같다.
let a = new Array(); // 빈 객체를 만든다. []와 같다.
let d = new Date(); // 현재 시간을 나타내는 Date 객체를 만든다.
let r = new Map(); // 키와 값을 연결하는 Map 객체를 만든다.
- 자신과 연결된 두 번째 객체를 의미한다.
- 객체 리터럴을 사용해 생성한 객테는 모두 같은 프로토타입을 가진다.
- 프로토타입 객체는 Object.prototye이라는 코드로 참조할 수 있다.
| 객체 | 상속 |
|---|---|
| new Object | Object.prototype |
| new Array() | Arry.prototype |
| new Date() | Date.prototype |
- Object.create()는 첫 번째 인자를 프로토타입 삼아 새 객체를 생성한다.
let o1 = Object.create({x: 1, y: 2}); // o1은 x와 y 프로퍼티를 상속한다.
o1.x + o1.y // => 3
let o2 = Object.create(null); // o2는 프로터치나 메서드를 상속하지 않는다.
let o3 = Object.create(Object.prototype); // o3은 {}나 new Object()와 같다.
- Object.create()를 사용하는 목적 중 하나는 서드 파티 라이브러리에서 객체를 변경하는 사고를 막는 것이다.
let o = { x: "don't change this value" };
library.function(Object.create(o)); // 의도치 않은 변경에 대한 방어
- 프로퍼티 값에 접근할 때는 점(.)이나 대괄호([]) 연산자를 사용한다.
let author = book.author; // book의 author 프로퍼티를 가져온다.
let name = author.surname; // author의 surname 프로퍼티를 가져온다.
let title = book["main title"]; // book의 main title 프로퍼티를 가져온다.
- 프로퍼티 생성 or 설정
book.edition = 7; // book에 edition 프로퍼티를 만든다.
book["main title"] = "ECMAScript"; // main title 프로퍼티를 변경한다.