let a = {};
let b = a; //참조에 의한 복사
//a,b 두 변수 모두 같은 객체를 참조한다.
참조하지 않고 별도의 복제 객체를 만들고 싶다면? 아래와 같은 방법으로 복제한다.
let test = {
name: "jisu",
age: 18
};
let clone = {};
for(let key in test){
clone[key] = test[key];
}
clone.name= "Jeong";
alert(test.name); //기존 객체의 값은 변경되지 않고 jisu로 나온다.
//Object.assign활용하기
let clone = Object.assign({},test);
Object.assign()으로 프로퍼티 병합하기
let user = { name : "jisu"};
let mission1 = { age: 16};
let mission2 = { hobby: "soccer"};
Object.assign(user, mission1, mission2);
user 객체 안에 mission1과 mission2의 프로퍼티가 복사된다.
만약, 동일한 값이 user객체 안에 있는 경우 기존 값이 덮어씌워진다.
그러나 Object.assign은 얕은 복사만 가능하기 때문에
중첩 객체인 경우 원본객체안의 객체와 클론객체안의 객체가 같은 참조값을 가리키게 된다.
다시 말해 해당 중첩 객체의 값을 변경하면 원본객체와 클론객체안의 객체값 모두 수정이 된다는 얘기이다.
이런 경우에는,
깊은 복사인 _.cloneDeep(obj)를 사용해야 한다.
'프로그래밍 언어 > Javascript' 카테고리의 다른 글
문자열 (0) | 2021.06.17 |
---|---|
[자바스크립트]숫자형 (0) | 2021.06.17 |
[기본문법]자바스크립트 객체 (0) | 2021.06.16 |
[기본 문법]자바스크립트 화살표 함수 (0) | 2021.06.16 |
[기본 문법]자바스크립트 콜백함수 (0) | 2021.06.16 |