[Javascript] 구조 분해 할당

zl존석동

·

2022. 1. 29. 20:59

 

ES6 의 구조 분해 할당 (Destructing Assignment) 방법에 대해 공부하고 기록하자


 

 

 

 

구조 분해 할당(Destructuring assignment)

 

배열이나 객체의 속성을 해체해 그 값을 각각의 변수에 담을 수 있게 하는 JavaScript 표현식이다

 

 

하나하나 할당해줘야 할 수 있었던 부분들을 한 번에 해결하며 코드의 양을 줄여줄 수 있다.

 

 

// 기존 할당 방법
var list = [1,2,3];
var v1 = list[0];
var v2 = list[1];
var v3 = list[2];

// 객체 분해할당 방법
var [v1,v2,v3] = list;

 

 

 

 

 

배열 객체분해 할당

 

양쪽 모두 배열 형식으로 지정해야하고 인덱스를 기준으로 값을 할당한다.

 

//basic
let one,two;
[one,two] = [100,200];

// no assignment
let a,b,c;
[a,b,c] = [100,200];
// c => undefined

// default value - 할당이 안되면 기본값으로 대체함
let aa,bb,cc;
[aa,bb,cc="hi"] = ["hell", "hello"];
console.log(aa,bb,cc); // hell hello hi

let [,,n] = [10,20,30];
console.log(n) // n = 30;

// rest
let arr = [1,2,3,4,5,6];
let [a,b,...rest] = arr;
console.log(b); // 2
console.log(rest); // [3,4,5,6]

//exchange : 기존처럼 temp 변수 필요없음
let x = 5;
let y = 3;
[y,x] = [x,y];

 

 

 

Object 객체분해 할당

 

Key 를 기준으로 값을 할당하며 Key에 맞는 이름으로 내부 변수를 선언하지 않으면 컴파일러가 인식하지 못한다.

 

 

let a,b;
({a,b} = {a:100,b:100});

let {a2,b2} = {a2:100,b2:100};

let {a3,b3} = {a3:"hi",c3:"hello"}; // b3 = undefined


let myObj = {
  name: "김갑환",
  age: 25,
};

let {name, age} = myObj; // OK

let {age, sex} = myObj;  // age = 25 , sex = undefined

let {name: username, age: userage} = myObj; // username: 김갑환, userage : 25

 

 

 

함수 객체분해 할당

 

호출받는 함수의 파라미터를 객체 분해할당 형태로 하여 함수에서 사용할 수 있다.

 

 

// 객체 파라미터
function f1({x,y}) {
	console.log(x,y);
}

f1({x:100,y:200});

// 배열 파라미터
function f2([x,y]) {
	console.log(x,y);
}
f2(['H','I']);

// 배열 리턴
function f3() {
  return [1, 2];
}
let [v1,v2] = f3();

// 객체 리턴
function f4() {
	return {name:"김갑환", age:25};
}
let {name,age} = f4();

// 반환값 무시
function f5() {
  return [1, 2, 3];
}
let[,a,] = f5(); // a = 2;
let[b] = f5(); // b = 1;

 

 

 

 

 

 

 

 

Ref

 

 

[JavaScript] 구조 분해 / 비구조화 할당 (Destructuring assignment)

구조 분해 할당(Destructuring assignment)의 사용법과 그 예를 알아보자!

hoya-kim.github.io

 

'Javascript' 카테고리의 다른 글

[Javascript] var, let, const  (0) 2022.01.28