let obj1 = {
name: 'obj1-name'
};
let obj2 = obj1;
obj2.name = 'NEW NAME'; /** obj1.name 도 NEW NAME으로 변한다. */
위와같이 =을 사용해 변수에 객체를 할당하게 되면
참조하는 주소를 복사하게 된다.
따라서 아래와 같이 복사를 해서 사용하게 된다.
let obj1 = {
name: 'obj1-name'
};
let obj2 = Object.assign({}, obj1);
obj2.name = 'NEW NAME'; /** obj1.name은 변하지 않는다. */
한가지 주의할 점은, 아래와 같이 객체가 중첩되었을 경우인데,
해당 내부 객체를 건드릴 경우, 기존 내부 객체와 같이 변경이 된다.
즉, 객체 내부에 객체가 존재한다면, Object.assign()은 생각대로 완전하게 복사되지 않는다.
let obj1 = {
name: 'obj1-name',
arr: [100, 200, 300]
};
let obj2 = Object.assign({}, obj1);
console.log(obj1.arr === obj2.arr); /** true */
obj2.arr.push(-1);
console.log(obj1.arr); /** obj1.arr, obj2.arr 둘 다 [100, 200, 300, -1] */
배열을 복사해주는 방법인 concat, slice를 이용해 일일히 복사해주어야 한다.
(ES6일 경우 전개연산자)
'Dev- > java script, jQuery, Ajax' 카테고리의 다른 글
자바스크립트 typeof() vs instanceof() 차이 (0) | 2019.08.18 |
---|---|
자바스크립트 Object.freeze() (0) | 2019.08.15 |
자바스크립트 Object.create vs Object.assign 차이 (0) | 2019.08.14 |
자바스크립트 hasOwnProperty (0) | 2019.08.14 |
ES6 상속 (0) | 2019.08.13 |