let user = { name: 'John' }; let admin = user; admin.name = 'Pete'; // 'admin' 참조 값에 의해 변경됨 alert(user.name); // 'Pete'가 출력됨. 'user' 참조 값을 이용해 변경사항을 확인함
==와 일치 연산자 ===는 동일하게 동작함(피연산자인 두 객체가 동일한 객체인 경우 참 반환)let a = {}; let b = a; // 참조에 의한 복사 alert( a == b ); // true, 두 변수는 같은 객체를 참조합니다. alert( a === b ); // true
let a = {}; let b = {}; // 독립된 두 객체 alert( a == b ); // false
let user = { name: "John", age: 30 }; ```jsx let clone = {}; // 새로운 빈 객체 // 빈 객체에 user 프로퍼티 전부를 복사해 넣습니다. for (let key in user) { clone[key] = user[key]; } // 이제 clone은 완전히 독립적인 복제본이 되었습니다. clone.name = "Pete"; // clone의 데이터를 변경합니다. alert( user.name ); // 기존 객체에는 여전히 John이 있습니다.
⇒ 방법 2) Object.assign 사용
Object.assign(dest, [src1, src2, src3...])
첫 번째 인수 dest : 목표 객체
인수 src1, ..., srcN : 복사할 객체
... : 얼마든지 많은 객체를 인수로 사용할 수 있음
⇒ 객체 src1, ..., srcN의 프로퍼티를 dest에 복사.
dest를 제외한 인수(객체)의 프로퍼티 전부가 첫 번째 인수(객체)로 복사
마지막으로 dest를 반환
반복문 없이 간단히 객체 복사 가능
let user = { name: "John", age: 30 }; let clone = Object.assign({}, user);//빈 배열에 user의 모든 프로퍼티 복사되고 변수에 할당됨.
let user = { name: "John" }; Object.assign(user, { name: "Pete" }); alert(user.name); // user = { name: "Pete" }
Object.assign ⇒ 참조값만 복사!_.cloneDeep(obj) 사용 ⇒ 객체의 구조까지 복사해주는 반복문 사용