const age2 = age
와 같은 형태로 배열과 객체를 얕은 복사하면,
age2를 수정해도 원본배열인 age가 수정된다.
이에 대해서는 지난 포스팅 Premitive & Reference를 살펴보자
얕은 복사란 객체를 복사할 때 원래값과 같은 참조를 가리키는 것을 말한다.
얕은 복사이긴 한데, 깊은 복사 같은 얕은 복사
라고 한다..slice는 새로운 배열을 반환해 다른 참조값을 지닌다.
const players = ['Wes', 'Sarah', 'Ryan', 'Poppy'];
const team2 = players.slice();
team2[1]="changed"
console.log(team2 === players)//false
//['Wes', 'changed', 'Ryan', 'Lux'] ['Wes', 'Sarah', 'Ryan', 'Lux']
const cap2 = Object.assign({}, person, { number: 99});
이해가 안되는 부분들이 있었다.
예를 들면 얕은 복사는 한 뎁스만 복사하는 동시에 원본 배열에 대한 참조값을 유지하는 방식인데,얕은 복사에 포함되는 slice()는 다른 참조값을 가지고 수정사항이 원본배열에 반영되지 않는다.
이 부분에 대해서는 모던 자바스크립트를 참고해 아래 포스팅에 따로 정리해두었다.
얕은복사 : slice는 원본배열을 변경하지 않는데 왜 얕은 복사일까?