Development/Javascript

[JS] 구조분해할당

Rosie, Lee 2021. 10. 12. 09:04

구조분해할당 또는 비구조화할당 이라고 합니다.

아래 MDN 문서를 참고해주세요.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

 

구조 분해 할당 - JavaScript | MDN

구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다.

developer.mozilla.org

구조분해할당은 객체 또는 배열의 속성을 변수에 담을 수 있는 표현식입니다.

 

객체로 사용해보겠습니다.

const user = {
  id: 'hyemin',
  nickname:'혜민',
  age: 31,
  email: 'hyemin@test.test'
}

const {id, nickname, age, email} = user; 
console.log(`아이디는 ${id}의 닉네임은 ${nickname}이고 나이는 ${age}입니다. 이메일주소는 ${email}`);
// output -> 아이디는 hyemin의 닉네임은 혜민이고 나이는 31입니다. 이메일주소는 hyemin@test.test

 

만약 email 값이 없다면 어떻게 될까요?

const user = {
  id: 'hyemin',
  nickname:'혜민',
  age: 31
}

const {id, nickname, age, email} = user; 
console.log(`아이디는 ${id}의 닉네임은 ${nickname}이고 나이는 ${age}입니다. 이메일주소는 ${email}`);
// output -> 아이디는 hyemin의 닉네임은 혜민이고 나이는 31입니다. 이메일주소는 undefined

위와 같이 undefined로 뜹니다. 이 부분을 해결하기 위해 기본값을 지정해줄 수 있습니다.

const user = {
  id: 'hyemin',
  nickname:'혜민',
  age: 31
}

const {id, nickname, age, email = test} = user; 
console.log(`아이디는 ${id}의 닉네임은 ${nickname}이고 나이는 ${age}입니다. 이메일주소는 ${email}`);
// output -> 아이디는 hyemin의 닉네임은 혜민이고 나이는 31입니다. 이메일주소는 test

 

 

또한 변수명을 변경해줄 수 있습니다.

변수명 id를 변경해보겠습니다.

const user = {
  id: 'hyemin',
  nickname:'혜민',
  age: 31
}

const {id:userId, nickname, age, email = test} = user; 
console.log(`아이디는 ${userId}의 닉네임은 ${nickname}이고 나이는 ${age}입니다. 이메일주소는 ${email}`);
// output -> 아이디는 hyemin의 닉네임은 혜민이고 나이는 31입니다. 이메일주소는 test

 

 

이번에는 배열로 사용해보겠습니다.

const alphabet = ['A','B','C']; 
const [a,b,c,d] = alphabet;
console.log(a,b,c,d);
// output -> A B C undefined

배열은 순서대로 출력됩니다. d 값에 해당하는 배열의 자릿수에는 값이 없기 때문에 undefined로 출력됩니다.

 

그리고 배열에서 해당하는 값 만 가지고 오고 싶을때는 배열의 자릿수대로 , 로 구분하여 가져올 수 있습니다.

B 값만 출력해보겠습니다.

const alphabet = ['A','B','C']; 
const [,b] = alphabet;
console.log(b);
// output -> B

C 값만 출력한다면 아래와 같이 코드를 작성하면 됩니다.

const alphabet = ['A','B','C']; 
const [,,c] = alphabet;
console.log(c);
// output -> C

 

반응형