객체는 중요한 개념이므로 책에 나온 개념을 정리해서 기억하고자 했다.
객체는 0개 이상의 프로퍼티로 구성된 집합이며 프로퍼티는 키(Key)와 값(Value)으로 구성된다.
객체 생성 방법에는 다양한 것들이 있지만 가장 일반적인 방법은 객체 리터럴을 사용하는 것이다.
{...}
내에 0개 이상의 프로퍼티를 정의함var haeun = {
name: 'Kim',
sayHello: function () {
console.log(`Hello! My name is ${this.name}.`);
}
};
console.log(typeof haeun); // object
console.log(haeun); // {name: "Kim", sayHello: f}
var empty = {};
console.log(typeof empty); // object
자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티 값이 될 수 있다.
,
로 구분함var haeun = {
firstName: 'ha-eun', // 식별자 네이밍 규칙을 준수하는 프로퍼티 키
'last-name': 'Kim' // 식별자 네이밍 규칙을 준수하지 않는 프로퍼티 키
};
console.log(haeun); // {firstName: "ha-eun", last-name: "Kim"}
var obj = {};
var key = 'hello';
// ES5: 프로퍼티 키 동적 생성
obj[key] = 'world';
console.log(obj); // {hello: "world"}
var haeun = {
name: 'Kim'
};
// 마침표 표기법에 의한 프로퍼티 접근
console.log(haeun.name); // Kim
// 대괄호 표기법에 의한 프로퍼티 접근
console.log(haeun['name']); // Kim
var haeun = {
name: 'Lee'
};
// 프로퍼티 값 갱신
haeun.name = 'Kim';
// 프로퍼티 동적 생성
haeun.age = 28;
// delete 연산자로 age 프로퍼티 삭제
delete haeun.age;
// delete 연산자로 존재하지 않는 프로퍼티 삭제
delete haeun.address;
console.log(haeun); // {name: "Kim"}
//ES5
var x = 1, y = 2;
var obj = {
x: x,
y: y
};
console.log(obj) // {x: 1, y: 2}
// ES6
let x = 1, y = 2;
// 프로퍼티 축약 표현
const obj = { x, y };
console.log(obj); // {x: 1, y: 2}
// ES5: 계산된 프로퍼티 이름으로 키를 동적으로 생성하려면 객체 리터럴 외부에서 대괄호를 사용해야함
var prefix = 'prop';
var i = 0;
var obj = {};
// 계산된 프로퍼티 이름으로 프로퍼티 키 동적 생성
obj[prefix + '-' + ++i] = i;
obj[prefix + '-' + ++i] = i;
obj[prefix + '-' + ++i] = i;
console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}
// ES6: 객체 리터럴 내부에서도 계산된 프로퍼티 이름으로 키를 동적 생성할 수 있음
var prefix = 'prop';
var i = 0;
var obj = {};
// 계산된 프로퍼티 이름으로 프로퍼티 키 동적 생성
const obj = {
[`${prefix}-${++i}`] = i,
[`${prefix}-${++i}`] = i,
[`${prefix}-${++i}`] = i
};
console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}
// ES5: 메서드를 정의하려면 프로퍼티 값으로 함수를 할당함
var obj = {
name: 'Kim',
sayHi: function() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! Kim
//ES6: 메서드를 정의할 때 function 키워드를 생략한 축약 표현을 사용할 수 있음
var obj = {
name: 'Kim',
//메서드 축약 표현
sayHi() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! Kim
- 객체는 프로퍼티의 집합이며 객체를 생성하는 방법 중 객체 리터럴이 가장 일반적인 방법이다.
- 프로퍼티에 접근하는 방법에는 마침표 표기법과 대괄호 표기법이 있다.
- ES06에서 추가된 객체 리터럴의 확장 기능으로 프로퍼티 축약 표현, 메서드 축약 표현을 사용할 수 있게 됐으며 계산된 프로퍼티 이름을 객체 내부에서도 이용할 수 있게 됐다.