250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 리액트 공식문서
- 파이썬 딕셔너리
- useState
- 프로그래머스
- 타입스크립트 리액트
- 리액트 훅
- typeScript
- 파이썬 enumerate
- useEffect
- 한글 공부 사이트
- 리액트
- 파이썬 slice
- JavaScript
- 내배캠 프로젝트
- Next 팀 프로젝트
- 타입스크립트
- 내일배움캠프 프로젝트
- 리액트 프로젝트
- tanstack query
- REACT
- 내일배움캠프 최종 프로젝트
- 타입스크립트 props
- React Hooks
- 파이썬 반복문
- 자바스크립트
- 코딩테스트
- 파이썬 for in
- 파이썬 for
- 내일배움캠프
- 파이썬 replace
Archives
- Today
- Total
sohyeon kim
[JS] 불변 객체, 얕은 복사, 깊은 복사 : 원본 객체에 영향 미치지 않기 본문
728x90
💡 객체를 활용해 새 객체를 만들어낼 때 원본 객체에 영향이 없도록 해보자!
객체의 프로퍼티(속성)에 접근해 영향을 줌 : 가변
let user = {
name: 'aoto',
gender: 'female',
};
const changeName = function (user, newName) {
let newUser = user;
newUser.name = newName;
return newUser;
};
let user2 = changeName(user, 'yae');
console.log(user.name, user2.name) // yae yae
객체의 프로퍼티에 접근하는 것이 아니라 새로운 객체를 반환 : 불변
let user = {
name: 'aoto',
gender: 'female',
};
const changeName = function (user, newName) {
return {
name = newName;
gender = user.gender;
};
};
let user2 = changeName(user, 'yae');
console.log(user.name, user2.name) // aoto yae
❗️ 하지만 위 방식에서 return 값이 많을 시, 코드가 길어질 수 있으니 얕은 복사를 활용해보자!
for in 반복문 활용 ➡️ 얕은 복사를 했으니 user와 user2는 별개의 객체!
let user = {
name: 'aoto',
gender: 'female',
};
const copyObject = function (target) {
let result = {};
for (let prop in target) {
result[prop] = target[prop];
}
return result;
};
let user2 = copyObject(user);
user2.name = 'yae'
console.log(user.name, user2.name) // aoto yae
❗️ 하지만..! 중접 객체는 깊은 복사를 해야 한다!
객체의 프로퍼티 중, 기본형 데이터는 그대로 복사하고 참조형 데이터는 다시 그 내부의 프로퍼티를 복사하도록 ~
➡️ 재귀적으로 수행되게!
const copyObjectDeep = function (target) {
let result = {};
if (typeOf target === 'object' && target !== null) {
for (let prop in target) {
result[prop] = copyObjectDeep(target[prop])
}
} else {
result = target;
}
return result;
}
728x90
반응형
'JavaScript' 카테고리의 다른 글
[JS] forEach() & map() 차이점 (0) | 2024.07.15 |
---|---|
[JS] input maxlength : 한글, 숫자 입력 시 오류 해결 & e.target 구조분해 (1) | 2024.02.17 |
[JS] 함수 선언문 & 화살표 함수 : 호이스팅, 호출 위치 (0) | 2024.02.16 |
[JS] 문자열 첫 글자만 대문자로 변경 (0) | 2024.02.09 |
[Web] SPA : 싱글 페이지 App (0) | 2024.01.26 |