[el, ...array]

개발(공부) 자국·2021년 5월 15일
0

오늘 헷갈렸던 부분은 구조 분해 할당에 대한 부분이다.

구조분해 할당을 할때는 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와 비슷하다.


profile
기록을 중요하게 생각하는 사람입니다. 학습한 내용을 정리한 것이라 잘못된 정보가 있을 수 있습니다. 잘못된 정보는 언제든 말씀해 주시기 바랍니다.

0개의 댓글