[].reverse(); // 요소에 직접 실행시킬 수 있는 배열 메소드와 달리
// O
{}.assign(); // 요소에 직접 실행시킬 수 없다.
// X
첫번째 인수인 target에 두번째~ 마지막 인수인 sources를 복사해서 병합한 값을 반환한다.
원본 객체가 변형된다.
const userAge = {
name: 'erun',
age: 42
}
const userEmail = {
name: 'erun',
email: 'erun@erun.com'
}
const result = Object.assign(userAge, userEmail);
console.log(result);
// {
// name: 'erun',
// age: 42,
// email: 'erun@erun.com'
//}
console.log(userAge);
// {
// name: 'erun',
// age: 42,
// email: 'erun@erun.com'
//}
console.log(result === userAge);
// true
값이 똑같아서 true가 아니고,
객체데이터의 메모리주소가 같기때문에 두 객체가 동일하다는 결과가 나왔다.
(데이터가 저장된 위치가 동일)
const a = { name: 007 };
const b = { name: 007 };
console.log(a === b)
// false
위 코드의 객체 a와 b는 값이 같지만 서로 다른 메모리 주소를 사용하기 때문에 같지 않다.
target의 위치에 빈 객체를, 두 번째~ 마지막 위치에 병합하고자 하는 객체들을 넣어준다.
const result = Object.assign({}, userAge, userEmail);
console.log(result);
// {
// name: 'erun',
// age: 42,
// email: 'erun@erun.com'
//}
console.log(userAge);
// {
// name: 'erun',
// age: 42,
//}
console.log(result === userAge);
// false
target의 위치에 빈 객체를, 두 번째 위치에 복사하고자 하는 객체를 넣어준다.
const userAge2 = Object.assign({}, userAge);
console.log(userAge);
// {
// name: 'erun',
// age: 42,
//}
console.log(userAge2);
// {
// name: 'erun',
// age: 42,
//}
console.log(userAge === userAge2);
// false
userAge가 바라보고 있는 메모리주소가 있고,
이를 복사해서 새로운 메모리주소를 바라보는 userAge2를 생성했다.
인수 객체의 key값을 배열로 생성해 반환한다.
const user = {
name: 'erun',
age: 42,
email: 'erun@erun.com'
}
const keys = Object.keys(user);
console.log(keys);
// ['name', 'age', 'email']
const user = {
name: 'erun',
age: 42,
email: 'erun@erun.com'
}
const keys = Object.keys(user);
console.log(keys);
// ['name', 'age', 'email']
// 배열의 인덱싱으로 값 가져오기
console.log(keys[2]);
// 'erun@erun.com'
// 객체의 인덱싱으로 값 가져오기
console.log(keys['email']);
// 'erun@erun.com'
const values = key.map(key => user[key]);
console.log(values);
// ['erun', 42, 'erun@erun.com'];