function copyObj(obj) {
var copy = {};
if(typeof obj === 'object' && obj !== null) {
for(var attr in obj) {
if(obj.hasOwnProperty(attr)) {
copy[attr] = copyObj[obj][attr]);
}
}
}else {
copy = obj;
}
return copy;
}
가장 간단하게 복사하는 방법 : JSON이용.
var obj = {a: 1, b: { c:3},};//b는 다른 객체를 갖는다
var obj2 = {};
Object.keys(obj);
obj2 = JSON.parse(JSON.stringify(obj))
obj2.a = 4;
obj.a = 1;//값이 변하지 않고 그대로다.
obj2.b.c = 8;
obj.b.c = 1;//값이 바뀌어버렸다.
위의 대안들도 수많은 예외상황이 존재하기 때문에 사실상 객체의 깊은복사는 어렵다.
아래 코드는 slice를 사용하여 배열을 깊은복사하는 방법이다. 하지만 이 방법도 껍데기만 깊은 복사이고 속은 얕은 복사이다. Object.key와 forEach문을 이용했을 때와 비슷하다.
arr = [1,2,3];
arr2 = arr.slice();//참조관계를 끊으며 복사.
var obj3 = JSON.parse(JSON.stringify(obj1));//복사