var str = 'Hello';
str = 'world';
‘Hello’ 메모리 주소를 가리키고 있던 식별자 str은 새로운 문자열인 ‘world’를 메모리에 생성하고 이걸 가리키도록 변경된다. 따라서 두 문자열 모두 메모리에 존재하고 있다.
// Syntax
Object.assign(target, ... sources)
// Copy
const obj = { a: 1 };
const copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
console.log(obj == copy); // false
// Merge
const o1 = { a: 1 };
const o2 = { b: 2 };
const o3 = { c: 3 };
const merge1 = Object.assign(o1, o2, o3);
console.log(merge1); // { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1, b: 2, c: 3 }, 타겟 객체 변경
const user1 = {
name: 'Lee',
address: {
city: 'Seoul'
}
};
const user2 = Object.assign({}, user1, {name: 'Kim'});
console.log(user1.name); // Lee
console.log(user2.name); // Kim
Object.freeze(user1); // 불변 객체
user1.name = 'Kim'; // 변경 무시
console.log(user1); // { name: 'Lee', address: { city: 'Seoul' } }
user1.address.city = 'Busan'; // 변경 가능
console.log(user1); // { name: 'Lee', address: { city: 'Busan' } }
function deepFreeze(obj) {
const props = Object.getOwnPropertyNames(obj);
props.forEach((name) => {
const prop = obj[name];
if(typeof prop === 'object' && prop !== null) {
deepFreeze(prop);
}
});
return Object.freeze(obj);
}
$ npm install immutable