다음과 같이 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 ``
for문을 통해 복사할 객체의 키와 값을 하나씩 복사
let admin = {} for(let key in user){ admin[key] = user[key] }
let admin = Object.assign({}, user);
복사할 객체의 필드 값을 하나씩 나열해준다. (user.name , user.age)
let admin = {...user}
얕은 복사의 문제점을 해결할 수 있다. (객체 내 또 다른 객체가 있다면 복사되지 않음)
만약 다음과 같이 user의 객체가 있을때 얕은 복사를 한 경우 sizes의 객체는 주소값만 복사되어 값을 변경시 user의 sizes값 또한 변경된다.
let user = { name : "jjj", age : 23, sizes : { height : 170, weight : 67, } }
JSON 객체를 이용한 깊은 복사, stringify는 객체를 문자열로 변환하는데 이때 원복 객체(user)와의 참조가 끊긴다.
//user객체를 문자열로 바꿔준뒤 다시 객체로 변환해주어 새로운 주소값을 받는다. let admin_json = JSON.parse(JSON.stringify(user))