구조분해 할당(Destructuring assignment)

2022. 11. 21. 22:59WEB개발/TIL

반응형

Javascript 문법

 

구조분해 할당(Destructuring assignment)

: 배열이나 객체의 속성을 해체해 그 값을 개별변수에 담는 것

  • 배열 구조 분해
  • 객체 구조 분해

 

배열 구조 분해

const [변수] = 배열;

 

  • 각 변수에 배열을 인덱스 순으로 값 대응
const list =["안녕","반가워",2];
[item1,  item2, item3] = list;
// 밑의 식과 동일
// const item1 = list[0];
// const item2 = list[1];
// const item3 = list[2];

console.log(item1); // 안녕
console.log(item2); // 반가워
console.log(item3); // 2
console.log("-------------");

//item1, item2, item3의 값이 없으면 hello 출력, item4값이 없으면 hi출력
[item1, item2, item3 = "hello", item4 = "hi"] = list;
console.log(item1); // 안녕
console.log(item4); // hi

 

  • 변수의 선언이 분리되어도 구조 분해를 통해 값 할당 가능
var a, b;
[a,b] = ["안녕", "반가워"];
console.log(a);
console.log(b);

 

  • 구조분해 시 변수의 값이 undefined일 때 기본값 할당 가능
var c, d;
[c="하하하",d="히히히"] = ["신난다!"];
console.log(c); // 신난다!
console.log(d); // 히히히
// c의 기본값은 "하하하", d의 기본값은 "히히히"
// c는 구조 분해 값이 할당되어 "신난다!" 출력
// d는 구조 분해 값이 undefined이기 때문에 기본값인 "히히히"출력

 

 

 

객체 구조 분해

const {변수} = 객체;

 

  • 객체 안의 속성을 변수명으로 사용
const obj = {
    key1: "value1",
    key2: "value2"
};

const {key1,key2,key3="value3"} = obj;
console.log(key1); // value1
console.log(key2); // value2
console.log(key3); // value3
객체 구조 분해는 key값으로 value값을 찾기 때문에 객체가 만들어진 순서대로 변수명을 적지 않아도 됨
배열 구조 분해는 index로 값을 가져오기 때문에 변수명을 적을 때 순서를 지켜가며 작성해야 함

 

  • :(콜론)을 이용해 새 변수명을 선언하고, 원래의 값을 새 변수명에 할당할 수 있음
const obj2 = {
    a: "apple",
    b: "banana",
    c: "candy"
};
const { a, b:b2, c} = obj2;
console.log(a);  // apple
console.log(b2);  // banana
console.log(c);  // candy

 

  • rest (나머지) 연산자

      : 나머지를 가져오는 연산자

        객체/배열/함수의 파라미터에서 사용 가능

const { b, ...rest} = obj2; //rest 연산자는 마지막에 위치시켜야 함
console.log(b); // banana
console.log(rest); // { a: 'apple', c: 'candy' }
//rest는 지정 key값(ex. b) 외 나머지의 key와 value값(ex, a,c)을 가져옴

 

 

 

 

 

반응형

'WEB개발 > TIL' 카테고리의 다른 글

Callback과 Promise  (0) 2022.11.23
Class, Object, Instance  (0) 2022.11.21
Node.js(module)  (0) 2022.11.21
Node.js(정의, 특징, 사용방법, REPL)  (0) 2022.11.21
개발이론 및 git 추가 정리(branch, merge)  (0) 2022.11.19