원시값 - 값이 복사
객체값 - 참조값이 복사
객체의 동작 방식
: 객체가 저장되어 있는 메모리의 주소(참조값)이 저장, 복사된다.
let user = {name: "Nadia"};
let admin = user;
admin.name = "Pete"; // admin의 참조값은 user의 참조값과 같다.
alert(user.name); // Pete 출력
객체 참조값 비교
참조에 의한 복사
let a = {};
let b = a;
alert(a==b); // true
alert(a===b); // true
독립된 개체
let a = {};
let b = {};
alert(a==b); // false
객체 복사 Object.assign
: Object.assign(목표 객체, 복사 객체 1, 2...)
- 괄호 안에 목표로 하는 객체와 복사하고자 하는 개체를 넣는다.
- 복사 객체는 얼마든지 많은 객체를 사용할 수 있다.
- 복사 객체들이 목표 객체로 복사된다.
let user = {name: "Nadia"};
let permissions1 = {canView: true};
let permissions1 = {canEdit: true};
Object.assign(user, permission1, permission2);
-> 객체 user에 permission1, permission2의 값을 복사함
현재 user = {name: "Nadia", canView: true, canEdit: true}
- 목표 객체에 동일한 이름의 프로퍼티가 있는 경우, 기존 값이 덮어씌워진다.
let user = {name: "John"};
Object.assign(user, {name: "Nadia"}); // John이 Nadia로 덮어씌워짐
alert(user.name); // user = {name: "Nadia")
-------------------
let user = {
name: "Nadia",
age: 24
};
let clone = Object.assign({}, user);
--> 객체 user의 모든 프로퍼티가 빈 배열{}에 복사되고, 변수 clone에 할당된다.
* 중첩 객체 복사
:프로퍼티가 다른 객체에 대한 참조값일 경우 => 라이브러리 사용