참고: 이웅모 《모던 자바스크립트 Deep Dive》 10장 · MDN Working with objects
원시만 다루다 객체를 만나면 “값인데 안의 칸을 바꾼다”가 어색했다. 객체는 키-값의 집합이자 참조 타입이다. 변수에는 상자가 아니라 상자로 가는 주소가 담긴다.
flowchart LR
VAR[변수] -->|참조| OBJ[객체]
OBJ --> K1[키: 값]
OBJ --> K2[키: 함수=메서드]
상태(프로퍼티)와 행동(메서드)을 하나로 묶은 복합 데이터. JS의 거의 모든 구조(배열·함수·정규식)가 객체 계열이다.
가장 흔한 생성법. {} 안에 키: 값.
const person = {
name: '민섭',
age: 20,
};
new Object()도 가능하나 리터럴이 기본(17).
키는 문자열·심벌. 숫자 키도 문자열로 바뀐다. 값은 아무 타입.
const o = { 1: 'a', 'hi': 1 };
console.log(o[1], o['1']);
식별자 규칙을 깨는 키는 따옴표.
값이 함수면 메서드. 객체에 행동을 붙인다.
const counter = {
n: 0,
inc() { this.n += 1; return this.n; },
};
점 obj.name / 대괄호 obj['name']. 키가 변수·표현식이면 대괄호 필수.
const key = 'age';
console.log(person[key]);
없는 키는 undefined. in/hasOwn은 19·16.