객체 복사

llsh·2022년 2월 11일
0

JS

목록 보기
1/1

문제점

다음과 같이 admin 변수에 user 객체를 복사했을때 admin값을 변경하면 admin값만 변경 될거 같지만 user의 값 또한 변경되어 출력된다, 이는 admin이 user의 주소값만 복사됬기 때문에 이러한 문제점이 발생하게 된다.

let user = {
	name : 'jjj',
    age : 23
}

let admin = user;
admin.name = "park"

console.log(admin.name) // "park"
consoel.log(user.name) // "park"

user.age = 30;
console.log(admin.age , user.age) // 30 30 
``

해결 방법

얕은 복사

1. for문

for문을 통해 복사할 객체의 키와 값을 하나씩 복사

let admin = {}
for(let key in user){
	admin[key] = user[key]
}

2. Object.assign()

let admin = Object.assign({}, user);

3. es6 전개 연산자

복사할 객체의 필드 값을 하나씩 나열해준다. (user.name , user.age)

let admin = {...user}

깊은 복사

얕은 복사의 문제점을 해결할 수 있다. (객체 내 또 다른 객체가 있다면 복사되지 않음)
만약 다음과 같이 user의 객체가 있을때 얕은 복사를 한 경우 sizes의 객체는 주소값만 복사되어 값을 변경시 user의 sizes값 또한 변경된다.

let user = {
	name : "jjj",
    age : 23,
    sizes : {
    	height : 170,
        weight : 67,
    }
}

1. JSON

JSON 객체를 이용한 깊은 복사, stringify는 객체를 문자열로 변환하는데 이때 원복 객체(user)와의 참조가 끊긴다.

//user객체를 문자열로 바꿔준뒤 다시 객체로 변환해주어 새로운 주소값을 받는다.
let admin_json = JSON.parse(JSON.stringify(user))
profile
기록 기록 기록..

0개의 댓글