얕은 복사란, 참조형 타입의 값이 바로 아래 단계의 값만 복사하는 방법이다.
깊은 복사란, 참조형 타입 안의 모든 참조가 끊어지는 방법이다.
기본형 타입에는 Number, String, Boolean, undefined, null, 그리고 ES6에서 추가된 Symbol이 있다.
참조형 타입은 Object, Array, Function, Date, RegExp, 그리고 ES6에서 추가된 Map, WeakMap, Set, WeakSet이 있다.
기본형과 참조형을 구분할 수 있는 방법은, 할당이나 연산 시 값을 복사하면 기본형이고, 값을 참조하면 참조형이다.
기본형의 데이터타입은 불변형이다.
즉 메모리 확보 후 값을 저장하고 메모리주소를 활용해 값을 할당한다.
var a = 10;
a = 20;
console.log(a); // 20
가비지컬렉터
가 처리한다.가비지컬렉션의 수행기준 https://ko.javascript.info/garbage-collection
var deepCopy = function (obj) {
var result = {};
if (typeof obj === 'object' && obj !== null) {
for (var prop in obj) {
result[obj] = deepCopy(obj[prop]);
}
} else {
result = obj;
}
return result;
};
var obj1 = {
a: 10,
b: 'abc',
};
var obj2 = JSON.parse(JSON.stringify(obj1));
obj2.b = 3;
console.log(obj1); // {a: 10, b: 'abc'}
console.log(obj2); // {a: 10, b: 3}
var obj2 = { ...obj1 };
Object.assign()
for … in
1차원의 데이터만 깊은복사가 일어나고 그 내부에선 얕은복사가 일어난다
= 원본값이 달라질 수 있으므로 위험하다
참조
https://pozafly.github.io/javascript/shallo-copy-and-deep-copy/