코딩 앙마 자바스크립트 중급 강좌 #3 - 객체 메소드, 계산된 프로퍼티 유튜브를 보고 정리한 글입니다.
Object.assign() : 객체 복제
const user = {
name : 'Mike',
age : 30
}
const newUser = Object.assign({}, user);
const cloneUser = user; 하면 안됩니다.
user 변수에는 객체 자체가 들어있는게 아니라, 객체가 저장되어있는 메모리 주소인 객체에 대한 참조값이 저장됩니다.
그러므로 cloneUser를 만들어서 user를 넣으면 객체가 복사되면서 들어가는게 아니라, 그 참조값만 복사되는 것입니다.
cloneUser를 만들어서 참조값을 복사하게 되면,
cloneUser.name = 'Tom'; 으로 cloneUser의 값만 바꾸어도, user의 이름도 바뀝니다.
하나의 객체를 두 변수가 접근하고 있는 것입니다.
동일하게 복제하려면, Object.assign({}, user)메소드를 사용해야 합니다.
여기서 빈 객체는 초기값입니다. 두번째 매개변수부터 들어온 객체들이 초기값에 병합됩니다.
이렇게 하면, 빈 객체에 user가 병합되므로 복제되는 것입니다.
이름을 바꿔도 user는 변함이 없습니다. 같은 객체가 아닙니다.
객체를 복제할 때, 초기값이 빈 객체가 아니면 그 키와 값도 함께 추가되어 복제됩니다.
Object.assign({ gender:'male' }, user);
console.log(user) // { gender: 'male', name: 'Mike', age : 30 }
만약 병합을 하는데, 키가 같다면 그 키의 값을 덮어쓰고 복제되는 값이 나옵니다.
Object.assign({ name: 'Tom' }, user);
console.log(user) // { name : 'Mike', age : 30 }
두개 이상의 객체도 합칠 수 있습니다.
const user = {
name : 'Mike'
}
const info1 = {
age : 30,
}
const info2 = {
gender : 'male',
}
Object.assign(user, info1, info2)
// { name : 'Mike', age : 30, gender : 'male' }
// user에 다 합쳐집니다
Object.keys() : 키 배열 반환
객체 프로퍼티의 키를 배열로 반환하는 메소드 입니다.
const user = {
name : 'Mike',
age : 30,
gender : 'male',
}
Object.keys(user); // ['name', 'age', 'gender']
Object.keys(obj).length // 이렇게 객체의 개수를 알고싶을 때도 사용합니다.
Object.values() : 값 배열 반환
객체 프로퍼티의 값을 배열로 반환하는 메소드 입니다.
const user = {
name : 'Mike',
age : 30,
gneder : 'male',
}
Object.values(user); // ['Mike', 30, 'male']
Object.entries() : 키/값 객체를 배열로 반환
키와 값을 모두 배열로 반환하는 메소드 입니다. 키와 값을 쌍으로 묶어서 배열로 줍니다. 배열 안에 각 키와 값이 들어있는 배열이 들어있습니다.
const user = {
name : 'Mike',
age : 30,
gneder : 'male',
}
Object.entries(user); // [ ['name','Mike'], ['age',30], ['gender','male'] ]
Object.fromEntries() : 키/값 배열을 객체로 반환
반대로 키와 값을 쌍으로 묶은 배열들을 객체로 반환하는 메소드 입니다.
const arr =
[
['name','Mike'],
['age',30],
['gender','male']
];
Object.fromEntries(arr); // { name: 'Mike', age: 30, gender: 'male', }
'자바스크립트 > 기초' 카테고리의 다른 글
1급 객체와 고차함수 개념 다시 정리하기 (0) | 2021.07.07 |
---|---|
TDZ (Temporal Dead Zone) (1) | 2021.06.28 |
slice, substring, substr 차이 (0) | 2021.06.25 |
isFinite (0) | 2021.06.25 |
함수 이름 짓기 (1) | 2021.06.20 |