-
원본 배열 복사 가능
-
복사하여 새롭게 생성된 배열은 원본 배열과 같은 요소를 갖지만, 참조하고 있는 주소는 다르다.
let arr = [0, 1, 2, 3]; let copiedArr = arr.slice(); console.log(copiedArr); // [0, 1, 2, 3] console.log(arr === copiedArr); // false
-
주소가 다르기 때문에 복사한 배열에 요소를 추가해도, 원본 배열에는 추가되지 않는다.
copiedArr.push(4); console.log(copiedArr); // [0, 1, 2, 3, 4] console.log(arr);// [0, 1, 2, 3]
-
ES6에서 새롭게 추가된 문법으로, 배열을 펼칠 수 있다.
-
배열이 할당된 변수명 앞에 ...을 붙여주면 된다.
let arr = [0, 1, 2, 3]; console.log(...arr); // 0 1 2 3
-
배열을 생성하는 방법을 먼저 이해해 보자.
-
아래와 같이 같은 요소를 가진 배열을 두 개 만든 후 변수에 각각 할당한다면, 두 변수는 같은 주소를 참조할까?
-
답은, 참조 자료형이기 때문에 각각 다른 주소를 참조한다.
let num = [1, 2, 3]; let int = [1, 2, 3]; console.log(num === int) // false
-
또한 새로운 배열 안에 원본 배열을 펼쳐서 전달하면, 원본 배열과 같은 요소를 가지고 있지만 각각 다른 주소를 참조하게 된다.
-
결과적으로 slice() 메서드를 사용한 것과 동일하게 동작하는 것이다.
let arr = [0, 1, 2, 3]; let copiedArr = [...arr]; console.log(copiedArr); // [0, 1, 2, 3] console.log(arr === copiedArr); // false copiedArr.push(4); console.log(copiedArr); // [0, 1, 2, 3, 4] console.log(arr); // [0, 1, 2, 3]
let obj = {firstName: "Ella", lastName: "Choi"};
let copiedObj = Object.assign({}, obj);
console.log(copiedObj) // { firstName: "Ella", lastName: "Choi" }
console.log(obj === copiedObj) // false
-
배열 뿐만 아니라, 객체 복사 시에도 사용 가능
let obj = {firstNmae: "Ella", lastName: "Choi"}; let copiedObj = {...obj}; console.log(copiedObj) // { firstName: "Ella", lastName: "**Choi**" } console.log(obj === copiedObj) // false