오늘 헷갈렸던 부분은 구조 분해 할당에 대한 부분이다.
구조분해 할당을 할때는 Spread syntax를 사용하게 되는 경우가 많다.
오늘 헷갈렸던 부분은 배열을 구조분해 할당 할 때
요소를 가져오는지 배열을 가져오는지에 대한 부분을 헷갈렸다.
많은 개념이 짧은 시간에 이해하려고 해서 그런지 처음에는 괜찮다가도
정리가 잘 안되있어서 헷갈릴 때가 있다.
첫번째,
let arr = [1, 2, 3, 4, 5, 6, 7];
let [...left, right] = arr;
Uncaught SyntaxError: Rest element must be last element
에러가 난 이유는 ...spread syntax를 요소의 마지막에 적지 않았기 때문이다.
두번째,
let arr = [1, 2, 3, 4, 5, 6, 7];
let [a, b, c, ... right] = arr;
a // 1
b // 2
c // 3
right // [4, 5, 6, 7]
typeof(a,b,c) // 'number'
Arrya.isArray(right) // true
여기서 a,b,c는 type이 array가 아닌 number이다.
그리고
구조분해 할당은 object안의 구조 안에 있는 값을 변수에 할당할 수 있는 편리한 방법이다.
arr 배열은 참조자료형이다. 그런데
저렇게 구조분해 할당으로 a,b,c,right가 할당 된 값이 바뀌어도
arr에 영향을 미치지 않는다. 얕은 복사가 되었기 때문이다.
a,b,c는 원시자료형이니 값이바뀌어도 영향을 당연히 주지 않지만
right는 arr의 값을 할당했으니 영향을 준다고 생각할 수 있지만
복사가 되어 할당되었기 때문에 다른 주소값이 담겨있어서 완전히 다른 배열이 된다.
이부분은 slice와 비슷하다.