반응형
배열은 slice() 사용가능
let numbers1 = [1, 2, 3];
let numbers2 = numbers1.slice();
numbers2.push(4);
console.log(numbers1); // [ 1, 2, 3 ]
console.log(numbers2); // [ 1, 2, 3, 4 ]
참조형은 복사가 불가능함(= 활용)
1) assign 메소드를 이용한 복사
let course1 = {
title : 'title',
language: 'JavaScript'
};
let course2 = Object.assign({}, course1);
course2.title = 'type';
console.log(course1); title 값 그대로
console.log(course2); title 값 변경
2) for ... in 문을 이용한 복사
function cloneObject(Object){
let temp = {};
for (let key in object){
temp[key] = object[key];
}
return temp;
}
let course1 = {
title : 'title',
language: 'JavaScript',
prerequisites: []
};
let course2 = cloneObject(course1);
course2.title = 'type';
course2.prerequisites.push('Python'); // 문제발생
console.log(course1);
console.log(course2);
- 객체 복사는 잘 됨
- course2에 추가한 선이수 과목이 course1에도 나타남 (선이수과목 property가 배열이기 때문에 주소값이 복사됨)
반응형