slice의 메서드의 인수를 모두 생략하면 원본배열의 복사본을 생성하여 반환한다.
이 때 생성된 복사본은 얕은 복사를 통해 생성된다.
slice는 얕은 복사를 하는데, 왜 원본 배열의 값을 변경하지 않을까?
얕은 복사는 한 단계까지만 복사하는 것을 말하는데, 원본 배열의 참조값을 그대로 복사해온다.
const players = ['Wes', 'Sarah', 'Ryan', 'Poppy'];
const team2 = players.slice();
team2[1]="changed"
console.log(team2 === players)// false
console.log(team2[2] === players[2])//true
slice는 원본배열과 다른 새로운 배열을 반환하므로, players와 team2는 참조값이 다른 별개의 배열이다. 따라서 team2 === players
는 false
이다.
그러나 배열 요소의 참조값은 같다. 즉, 얕은 복사되었다.
team2[2] === players[2]
는 true
이다.
즉, 복사된 배열 자체의 참조값은 새로 생성되었으나,
각 배열 요소의 참조값은 원본 배열요소의 참조값을 그대로 복사해왔기 때문에 (얕은복사) 동일하다.