const obj1 = {}; // 중괄호를 이용해 만들거나, (object literal syntax)
const obj2 = new Object(); // class를 이용해 만들수도 있다. (object constructor syntax)
참고로, 미리 정의해놓지 않은 property를 추가할 수 있고 심지어 삭제도 가능하다.
const ellie = { name: 'ellie', age: 4 };
ellie.hasJob = true; // 갑자기 hasJob 을 추가
console.log(ellie.hasJob); // true
delete ellie.hasJob; // 이렇게 삭제도 가능
console.log(ellie.hasJob); // undefined
하지만! 이렇게 하면 빨리 빨리 하기엔 좋을지 몰라도 유지 보수하기에는 매우 안 좋으니, 되도록이면 이런 식으로 추가하거나 삭제하지 말자.
key
는 항상string
이어야 한다.
console.log(ellie['name']); // 이렇게 쓰는게 computed properties
어떤 경우에 computed properties를 쓸까?
key
가 필요한지 모를때. 즉 runtime에서 결정될 때key
값을 받아오고 싶을 때const person1 = {name: 'bob', age: 2};
const person2 = {name: 'steve', age: 3};
const person3 = {name: 'dave', age: 4};
위와 같은 오브젝트들이 있을 때, person4 = {name: 'ellie', age: 30}
이라는 오브젝트를 추가하려고 한다.
이 때 그냥 타이핑하면 굉장히 번거롭기 때문에 오브젝트를 생성하는 함수를 만드는 방법을 사용하면 편리하다.
const person4 = makePerson('ellie', 30);
function makePerson(name, age) {
return {
name: name,
age: age,
};
}
여기서, key
와 value
의 이름이 동일하다면 Property value shorthand
라는 기능을 활용하여 하나를 생략할 수 있다.
function makePerson(name, age) {
return {
name,
age,
};
}
아하! 그러면 여기서
makePerson
이라는 함수는class
와 같은 역할을 하는구나!
그래서 class
가 등장하기 전에는 위와 같은 방법으로 오브젝트를 생성했다.
다른 계산 없이 순수하게 오브젝트를 생성하는 함수는 보통 대문자로 시작하도록 만들었고, return
을 사용하지 않고 아래와 같이 class
에서 보던 것처럼 작성한다. 호출할 때도 class
에서 오브젝트 만드는 것처럼 한다.
const person4 = new Person('ellie', 30);
function Person(name, age) {
this.name = name;
this.age = age;
}
오브젝트 안에 key
가 있는지 없는지 확인하는 방법
console.log('name' in ellie); // true
console.log('age' in ellie); // true
console.log('bbukku' in ellie); // false
console.log(ellie.bbukku); // undefined
// for (let elem in obj) 형태로 사용
for (let elem in ellie) {
console.log(elem); // name age hasJob
}
ellie
라는 오브젝트를 쭉 돌면서 지역변수 elem
에 key
값을 저장한다.
(강의에서는 지역변수가 elem
이 아니라 key
로 나왔는데 헷갈려서 elem
이라고 바꿨다. 뭐라고 이름 붙이든 상관없다.)
배열처럼 iterable한 상황에서 쓴다.
const array = [1, 2, 4, 5];
for(let elem of array) {
console.log(elem); // 1 2 4 5
const user = { name: 'ellie', age: '20 };
// old way
const user3 = {};
for (let key in user) {
user3[key] = user[key];
} // 정말로 값을 하나씩 다 넣는 방법이다.
// assign 메소드 활용하기
const user4 = {};
Object.assign(user4, user);
// 혹은 아래와 같이 써도 같은 말
const user4 = Object.assign({}, user);
assign
메소드에서 두 인자가 섞인 값이 리턴되므로 두 가지 방법 모두 쓸 수 있다.Object
를 상속한다는 것을 기억하기!property
를 assign
하면 어떻게 될까?const fruit1 = { color: 'red' };
const fruit2 = { color: 'blue', size: 'big' };
const mixed = Object.assign({}, fruit1, fruit2);
console.log(mixed.color); // blue
console.log(mixed.size); // big
뒤에 나오는 property
로 덮어씌워진다.