κ°μ²΄λ₯Ό νλ‘νΌν° κ°μΌλ‘ κ°λ κ°μ²΄μ κ²½μ° μμ 볡μ¬λ ν λ¨κ³κΉμ§λ§ 볡μ¬νλ κ²μ λ§νκ³ κΉμ 볡μ¬λ κ°μ²΄μ μ€μ²©λμ΄ μλ κ°μ²΄κΉμ§ λͺ¨λ 볡μ¬νλ κ²μ λ§νλ€.
π‘ μ¬κΈ°μ 볡μ¬λ μ°Έμ‘°κ°μ μλ‘ μμ±νμ¬ ν λΉλλ κ²μ λ§νλ€.
π‘ μμ 볡μ¬μ κΉμ 볡μ¬λ‘ μμ±λ κ°μ²΄λ μλ³Έκ³Όλ λ€λ₯Έ κ°μ²΄λ€! μ¦, μλ³Έκ³Ό 볡μ¬λ³Έμ μ°Έμ‘° κ°μ΄ λ€λ₯Έ λ³κ°μ κ°μ²΄λ€!!
πΎ#01 - μ κ°μ°μ°μ μ¬μ©
const obj = { x: { y: 1 } };
const c1 = {...obj}; // μ€νλ λ λ¬Έλ²
console.log(c1 === obj); // false
console.log(c1 == obj); // false
console.log( c1.x === obj.x ); // true
c1.x.y = 10;
console.log(obj.x.y); // 10
π‘ κ°μ²΄μ μ€μ²©λμ΄ μλ κ°μ²΄μ κ²½μ° μ°Έμ‘°κ°λ§ 볡μ¬νλ€!! κ°μ²΄μ μ€μ²©λμ΄ μλ κ°μ²΄κΉμ§ 볡μ¬νμ§ λͺ»ν΄ μ€μ²©λμ΄μλ κ°μ²΄μ μ£Όμκ° κ°μ.
πΎ#02 - Object.assign() λ©μλ μ¬μ©
const obj = {
a: 1,
b: {
c: 2,
},
};
const copydObj = Object.assign({}, obj);
copydObj.b.c = 3
console.log(obj.b.c); // 3
obj === copydObj // false
πΎ#03 - λ°°μ΄μμ μμ 볡μ¬, slice()λ©μλ
const items = ['a', 'b', 'c'];
// λͺ¨λ μμλ₯Ό λ°ν (= 볡μ¬λ³Έ(shallow copy) μμ±)
res = items.slice();
console.log(res); // [ 'a', 'b', 'c' ]
const todos = [
{ id: 1, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 3, content: 'Javascript', completed: false }
];
// shallow copy
const _todos = todos.slice();
// const _todos = [...todos];
console.log(_todos === todos); // false
// λ°°μ΄μ μμλ κ°λ€. μ¦, μμ 볡μ¬λμλ€.
console.log(_todos[0] === todos[0]); // true
π‘ κ°μ²΄μ μ€μ²©λμ΄ μλ κ°μ²΄κΉμ§ λͺ¨λ 볡μ¬ν΄μ μμ κ°μ²λΌ μμ ν 볡μ¬λ³Έμ λ§λ λ€!!
πΎ#01 Lodashμ cloneDeepμ μ¬μ©
const obj = { x: { y: 1 } };
const _ = require('lodash'); // import _ from 'lodash';
const c2 = _.cloneDeep(obj);
console.log(c2 === obj); // false
console.log( c2.x === obj.x ); // false