var person = {
// 프로퍼티 (키: 값)
name: 'Lee',
age: 20
};
{}
안에 0개 이상의 프로퍼티를 정의var person = {
name: 'Lee',
sayHello: function() {
console.log(`Hello! My name is ${this.name}.`);
}
};
console.log(typeof person); // object
console.log(person); // {name: 'Lee', sayHello: f}
프로퍼티 키는 식별자 네이밍 규칙을 준수하는 이름이면 따옴표를 생략할 수 있지만, 그렇지 않다면 반드시 따옴표를 사용해야 한다.
var person = {
// 식별자 네이밍 규칙 준수 O
firstName: 'Na-na',
// 식별자 네이밍 규칙 준수 X
last-name: 'Lee' // SyntaxError: Unexpected token -
// 따옴표로 묶어줘야 한다.
'last-name': 'Lee'
};
문자열 표현식을 사용해 프로퍼티 키를 동적으로 생성할 수 있다.
이 경우에는 프로퍼티 키로 사용할 표현식을 대괄호[]
로 묶어야 한다.
var obj = {};
var key = 'hello';
obj[key] ='world';
console.log(obj); // {hello: "world"}
이미 존재하는 프로퍼티 키를 중복 선언하면 먼저 선언한 프로퍼티를 덮어쓴다.
이 때 에러는 발생하지 않는다.
var foo = {
name: 'Lee',
name: 'Kim'
};
console.log(foo); // {name: "Kim"}
자바스크립트의 함수는 일급 객체이므로 값으로 취급될 수 있으며, 프로퍼티의 값이 될 수 있다.
프로퍼티 값이 함수일 경우, 일반 함수와 구분하기 위해 메소드라고 부른다.
즉, 메소드는 객체에 묶여있는 함수를 말한다.
var circle = {
radius: 5,
// 메소드
getDiameter: function() {
return 2 * this.radius; // this => circle을 가리킨다.
}
};
console.log(circle.getDiameter()); // 10
메소드 내부에서 사용한 this는 객체 자신을 가리킨다.
var person = {
name: 'Lee'
};
// 마침표 표기법 사용
console.log(person.name); // Lee
// 대괄호 표기법 사용
console.log(person['name']); // Lee
console.log(person[name]); // ReferenceError: name is not defined
대괄호 표기법을 사용할 경우, 지정하는 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 한다.
그렇지 않으면 자바스크립트 엔진은 식별자로 해석하여 참조 에러를 발생시킬 수 있다.
만약 객체에 존재하지 않는 프로퍼티에 접근하면 undefined를 반환한다.
var person = {
name: 'Lee'
};
console.log(person.age); // undefined
var person = {
name: 'Lee'
};
person.name = 'Kim'; // 갱신
console.log(person) // {name: "Kim"}
var person = {
name: 'Lee'
};
person.age = 20;
console.log(person); // {name: "Lee", age: 20}
var person = {
name: 'Lee'
};
delete person.name; // 삭제
console.log(person); // {}
var x = 1, y = 2;
var obj = {
x: x,
y: y
};
// 프로퍼티 축약 표현
var obj = {
x,
y
};
문자열 표현식을 사용해 프로퍼티 키를 동적으로 생성할 수도 있다.
이때 프로퍼티 키로 사용할 표현식을 대괄호[]
로 묶어야 한다.
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}
var prefix = 'prop';
var i = 0;
var obj = {
[`${prefix}-${++i}`] = i;
[`${prefix}-${++i}`] = i;
[`${prefix}-${++i}`] = i;
};
console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}
function
키워드 생략 가능// ES5
var obj = {
name: 'Lee',
sayHi: function() {
console.log('hi! ' + this.name);
}
};
// 메소드 축약 표현
var obj = {
name: 'Lee',
sayHi() {
console.log('hi! ' + this.name);
}
};
메소드 축약 표현으로 정의한 메소드는 프로퍼티에 할당한 함수와 다르게 동작한다.