🥸 객체 리터럴이란 객체를 생성하기 위한 표기법으로, 여기서 리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용하여 값을 생성하는 표기법을 말합니다.
원시 값을 제외한 나머지 값을 말한다.
let person = {
num: 0; // 프로퍼티 (num: 프로퍼티 키, 0: 프로퍼티 값)
increase: function () {
this.num++;
} // 메서드
};
객체의 상태를 나타내는 값으로, 키와 값으로 구성된다.
프로퍼티 키: 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
프로퍼티 값: 자바스크립트에서 사용할 수 있는 모든 값
last-name
의 -
를 연산자가 있는 표현식으로 해석한다.)let person = {
firstName: 'Zzang-gu',
last-name: 'Shin' // SyntaxError: Unexpected token -
};
let obj = {};
let key = 'hello';
obj[key] = 'world';
// let obj = {[key]: 'world'};
console.log(obj); // {hello: 'world'}
let list = {
0: 1,
1: 2,
2: 3
};
console.log(list); // {0: 1, 1: 2, 2: 3}
let test = {
name: 'Lee',
name: 'Shin'
};
console.log(test); // {name: 'Shin'}
대괄호 표기법을 사용하는 경우 프로퍼티 키의 값이 따옴표로 감싼 문자열이 아니면 자바스크립트 엔진은 프로퍼티 키의 값을 식별자로 해석한다. 또한, 객체에 존재하지 않는 프로퍼티에 접근하면 undefined를 반환한다.
let person = {
name: 'Lee'
};
console.log(person.name); // Lee
console.log(person['name']); // Lee
console.log(person[name]); // ReferenceError: name is not defined
console.log(person.age); // undefined
존재하지 않는 프로퍼티에 값을 할당하면 프로퍼티가 동적으로 생성되어 추가되고 프로퍼티 값이 할당된다. delete 연산자를 사용하여 객체의 프로퍼티를 삭제한다.
let person = {
name: 'Lee'
};
person.age = 20;
console.log(person); // {name: "Lee", age: 20}
delete person.age;
console.log(person); // {name: "Lee"}
프로퍼티를 참조하고 조작할수 있는 동작으로, 객체에 묶여있는 함수를 의미한다.
let apple = {
price: 5, // 프로퍼티
// 사과의 총합
getTotal: function () {
return 2 * this.apple; // this는 apple을 가리킨다.
} // 메서드
};
console.log(apple.getTotal()); // 10
변수 이름과 프로퍼티 키가 동일한 이름일 때 프로퍼티 키를 생략할 수 있다. 이 때, 프로퍼티 키는 변수 이름으로 자동 생성된다.
let x = 1, y = 2;
const obj = {x, y};
console.log(obj); // {x: 1, y: 2}
객체 리터럴 내부에서도 계산된 프로퍼티 이름으로 프로퍼티 키를 동적 생성할 수 있다.
const prefix = 'prop';
let i = 0;
const obj = {
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i
};
console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}
메서드를 정의할 때 function 키워드를 생략한 축약 표현을 사용할 수 있다.
const obj = {
name: 'Lee',
sayHi() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! Lee
🧐 해당 글은 책
모던 자바스크립트 deep dive
를 참고하여 작성하였습니다.