writed by dikum98
자바스크립트의 객체는 키(key)와 값(value)로 구성된 프로퍼티(Property)들의 집합이다.
자바스크립트에서 원시값을 제외한 모든 값은 객체로, 객체를 복사하면 값 자체가 아닌 주소가 복사된다.
자바스크립트의 함수는 일급 객체이므로 값으로 취급할 수 있다. 따라서 함수도 프로퍼티 값으로 사용할 수 있다. 프로퍼티 값이 함수일 경우, 일반 함수와 구분하기 위해 메서드(method)라 부른다.
이처럼 객체는 객체의 상태를 나타내는 값(프로퍼티)과 프로퍼티를 참조하고 조작할 수 있는 동작(메서드)을 모두 포함할 수 있기 때문에 상태와 동작을 하나의 단위로 구조화할 수 있어 유용하다.
⇒ 값으로 평가될 수 있느냐? yes
(12장 함수 참조)
**(12장 함수 참조)**
ES6 이전 : 객체에 바인딩된 함수 (일반적인 정의)
ES6 : 메서드 축약 표현으로 정의된 함수 (언어 사양에 따른 엄격한 정의)
let dog = {
name: "Rex",
breed: "Golden Retriever",
// ES6 method (엄격한 정의)
speak() {
console.log("Woof!");
}
// method (일반적인 정의)
eat: function () {
console.log("yum");
}
};
에러가 발생하지 않고 undefined를 반환한다.
프로퍼티는 key와 value가 쌍으로 존재한다. key만 있는 경우는 없다.
delete 연산자를 사용해서 객체의 프로퍼티를 삭제할 수 있다. 만약 존재하지 않는 프로퍼티를 삭제하면 아무런 에러 없이 무시된다.
배열은 기본적으로 객체의 한 형태이며, 배열의 요소들은 인덱스를 키로 하는 객체의 속성으로 취급된다. 따라서 배열의 요소도 delete 연산자를 사용하여 삭제할 수 있다.
프로퍼티 값으로 특정 변수에 할당된 값을 사용하는 경우, 해당 변수 이름과 프로퍼티 키가 동일할 때 프로퍼티 키를 생략할 수 있다.
let x = 1;
let y = 2;
const obj = { x, y };
자바스크립트의 계산된 프로퍼티 이름(computed property name)은 객체 리터럴 속성 이름을 동적으로 생성할 수 있는
ES6의 기능이다. 이 기능은 대괄호([]) 안에 표현식을 넣어 속성 이름을 계산하는 방식으로 사용한다.
문자열 또는 문자열로 타입 변환할 수 있는 값으로 평가되는 표현식을 사용해 프로퍼티 키를 동적으로 생성
한다.
객체의 속성명이 실행 시점에서 결정되어야 할 때, 또는 변수에 따라 동적으로 변해야 할 때
// #1
const name = 'kim';
const obj = {
[name.charAt(0).toUpperCase() + name.slice(1)]: 'Hello'
};
console.log(obj); // {Kim: 'Hello'}
// #2
let propName = "name";
let user = {
[propName]: "John Doe"
};
console.log(user.name); // John Doe
객체의 프로퍼티로 function 키워드를 생략한 축약 표현을 사용할 수 있다.
const obj = {
name: 'kim',
hi() {
console.log('hi ' + this.name);
};
};