객체는 프로퍼티와 메서드로 구성된 집합체임.
- 프로퍼티: 객체의 상태(state)를 나타내는 값
- 메서드: 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작(behavior)
Object.create
메서드 {...}
) 안에 0개 이상의 프로퍼티를 정의해 객체를 생성함. var person = {
name: 'Lee',
sayHello: function() {
console.log(`Hello! My name is ${this.name}.`);
}
};
var empty = {}; // 빈 객체
,
)로 구분함. var obj = {};
var key = 'hello';
// ES5
obj[key] = 'world';
// ES6
var obj2 = { [key]: 'world' };
// 기존 객체 obj에 age 프로퍼티를 동적으로 추가
obj.age = 20;
this
키워드는 해당 객체 자신을 가리키는 참조 변수임..
) 사용 []
) 사용 var person = {
name: 'Lee'
};
console.log(person.name); // 마침표 표기법
console.log(person['name']); // 대괄호 표기법
undefined
가 반환됨.var person = {
'last-name': 'Lee'
};
person.'last-name'; // SyntaxError: Unexpected string
// 브라우저 환경: NaN
// Node.js 환경: ReferenceError: name is not defined
person.last-name;
// 자바스크립트 엔진은 person.last를 먼저 평가 -> undefined
// 이후 name 식별자를 찾는데, 브라우저 환경에서는 name이라는 전역 변수가 암묵적으로 존재해 NaN이 됨
// Node.js 환경에서는 name 식별자가 없으므로 에러 발생
delete
연산자를 통해 객체의 프로퍼티를 삭제할 수 있음.var person = {
name: 'Lee'
};
// name 프로퍼티 삭제
delete person.name;
console.log(person); // {}
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