* 관련 챕터 : 2.5 자료형
JS의 8 가지 자료형 중 객체형만 원시형이 아니다.
원시형은 하나의 데이터(문자열, 숫자 등)만 담을 수 있어 primitive type으로 불린다.
즉, 원시형이 아닌 객체형은 키로 구분된 데이터 집합/복잡한 entity 등 다양한 데이터를 담을 수 있어 중요하다.
빈 객체를 만드는 방법은 두 가지가 있다.
let user = new Object(); // '객체 생성자' 문법
let user = {'키(이름/식별자):값'}; // '객체 리터럴' 문법, 주로 이 방법 사용
객체는 중괄호에 여러 프로퍼티를 넣을 수 있고, 프로퍼티는 ‘키(문자형):값(모든 자료형)”으로 구성되어 있다.
아래 그림으로 생각하면 이해하기 쉽다.

alert( user.name );"likes birds": true모든 프로퍼티가 유사한 형태를 보이기 때문에 프로퍼티 추가, 삭제, 이동이 용이
let user = {
name: "John",
age: 30,
}
‼️ 상수 객체 수정 가능 ‼️
const로 선언된 객체는 수정 가능하다!const user = {
name: "John"
};
user.name = "Pete"; // (*)
alert(user.name); // Pete
**const는 user의 값을 고정하지만, 그 내용은 고정하지 않는다.** (const는 user=...처럼 전체적으로 설정하려고 할 때만 오류 발생)유효한 변수 식별자만 사용 가능$와 _를 제외한 특수 문자가 없어야 함let key = "likes birds";
// user["likes birds"] = true; 와 같습니다.
user[key] = true;
key는 런타임에 평가 ⇒ 사용자 입력값 변경 등에 따라 값 변경 사항 반영 가능(코드 유연하게 작성 가능)let fruit = prompt("어떤 과일을 구매하시겠습니까?", "apple");
let bag = {};
// 변수 fruit을 사용해 프로퍼티 이름을 만들었습니다.
bag[fruit] = 5;점 표기법 vs 대괄호 표기법
- 대괄호 표기법 : 프로퍼티 이름, 값의 제약 없애줘 더 강력. 하지만 작성이 번거롭다.
⇒ 프로퍼티 이름 확정+단순한 이름이면 점 표기법 사용하다가 복잡해지면 대괄호 표기법으로 변경하는 게 흔하다.
let user = {
name, // name: name 과 같음
age: 30
};
__proto__ ⇒ 자세한 건 프로토타입 상속 단원에서,,delete obj.prop"key" in objfor (let key in obj)자바스크립트에는 일반 객체 이외에도 다양한 종류의 객체가 있다.
Array – 정렬된 데이터 컬렉션을 저장할 때 쓰임Date – 날짜와 시간 정보를 저장할 때 쓰임Error – 에러 정보를 저장할 때 쓰임⇒ 이 아이들은 독립적인 자료형이 아닌 객체에 다양한 기능을 넣어 확장한 또 다른 객체