데이터타입
원시값
String, Number, Boolean, Null, Undefined
-> 자동 깊은 복사, 다른 메모리에 값 자체를 할당
참조값
Object, Symbol
-> 얕은 복사, 가리키는 주소를 복사
얕은 복사
객체를 가리키는 주소를 같이쓰는것
바꾸면 같이 따라서 바뀌어 버린다
깊은 복사
- spread 연산자 사용 (1 depth 까지만)
- Object.assign() 메소드 사용 (1 depth 까지만)
완벽한 깊은 복사 방법
- 재귀적으로 깊은 복사 수행
- Lodash의 cloneDeep 함수 사용 (라이브러리)
- JSON.parse()와 JSON.Stringify() 함수 사용
- JSON.stringify()는 객체를 json문자열로 변환한다. 이 과정에서 원본객체와 참조가 모두 끊어진다.
- JSON.stringify()로 관계를 끊어버리고, 다시 JSON.parse()하여 객체형태로 만든다.
- 단점 ; 느림
const obj = {
a: 1,
b: {
c: 2,
},
};
const copiedObj = JSON.parse(JSON.stringify(obj));
copiedObj.b.c = 3
obj.b.c === copiedObj.b.c //false
'programming > Javascript' 카테고리의 다른 글
Node-Sequelize-Mysql (1) ORM 개념 (0) | 2022.07.06 |
---|---|
[JS] 비동기 프로그래밍 Callback -> Promise -> Async-await (0) | 2022.06.27 |
자바스크립트 프로토타입 (0) | 2022.03.11 |
자바스크립트의 형 변환(+ null & undefined 차이) (0) | 2022.03.11 |
이벤트 버블링과 캡처링 (0) | 2022.03.11 |