티스토리 뷰
반응형
- 구조 분해 할당은 객체나 배열을 변수로 분해할 수 있게 해주는 문법이다.
- 함수에 객체 또는 배열의 일부만 전달하고자 하는 경우에 사용할 수 있다.
1. 배열 분해
- 배열을 분해하고 변수에 초기화 하는 과정이 짧아진다.
- 대상 배열이 실제로 파괴되거나 분해되는 것은 아니다.
let arr = ["injuk", "hong"];
console.log(`Arr: ${arr}`);
let [last, first] = arr;
console.log(`Last: ${last}
First: ${first}`);
/* 실행
Arr: injuk,hong
Last: injuk
First: hong
*/
let [a, b] = 'hong ingnoh'.split(' ');
console.log(`last: ${a}
first: ${b}`);
/* 실행
last: hong
first: ingnoh
*/
- 필요 없는 배열 요소는 버릴 수 있다.
- 좌항에는 객체 속성도 올 수 있다.
let user = new Object();
[user.a, , user.c] = 'hong discard ingnoh discard'.split(' ');
console.log(user.a, user.c);
/* 실행
hong ingnoh
*/
- 2개 이상의 변수를 교체할 때에도 사용할 수 있다.
let a = 'injuk';
let b = 'ingnoh';
console.log(a, b);
// let temp = a;
// a = b;
// b = a;
// delete temp;
// console.log(a, b);
[a, b] = [b, a];
console.log(a, b);
/* 실행
injuk ingnoh
ingnoh injuk
*/
- 좌항과 우항은 반드시 변수 개수가 같을 필요는 없으며, 할당받으려는 항목 외는 모두 하나의 변수에 초기화하는 것도 가능하다.
let uselessArr = [
1, "abc", 2, true, false, {}
];
let [num, str, ...rest] = uselessArr;
console.log(num);
console.log(str);
console.log(rest);
/* 실행
1
abc
[ 2, true, false, {} ]
*/
- 좌항의 변수가 구조 분해하려는 배열의 개수보다 적을 수 있다.
- 이 경우, 등호를 사용하여 기본값을 지정할 수 있다.
let [firstname, lastname] = [];
console.log(firstname, lastname);
[firstname, lastname = "unknown"] = ["injuk"];
console.log(firstname, lastname);
/* 실행
undefined undefined
injuk unknown
*/
2. 객체 분해
- 배열과 달리 프로퍼티 명으로 분해해야만 한다.
let obj = {
"policyName": "abc",
"policyArn": "arn"
}
console.log(obj.policyName);
console.log(obj.policyArn);
let { policyName, policyArn } = obj;
console.log(policyName);
console.log(policyArn);
/* 실행
abc
arn
abc
arn
*/
- 프로퍼티명이 아닌 새로운 변수 이름을 사용하고 싶은 경우는 다음과 같이 작성할 것.
let obj = {
"policyName": "abc",
"policyArn": "arn"
}
let { policyName:foo, policyArn:bar } = obj;
console.log(foo);
console.log(bar);
/* 실행
abc
arn
*/
- 중첩된 객체는 구조를 맞춰주어야만 한다.
let obj = {
"hello": {
"a": 1,
"world": "hello world"
},
"true": true
}
let {
"hello": {
"a": num,
"world": world
},
"true": str
} = obj;
// let { hello: { a: num, world: world}, true: str} = obj; <- 이렇게도 사용 가능
console.log(num); // key와 다른 이름의 변수를 사용해도 무방
console.log(world); // key와 같은 이름의 변수를 사용해도 무방
console.log(str);
/* 실행
1
hello world
true
*/
'Dev. > javascript' 카테고리의 다른 글
[JS] eval is evil (0) | 2021.03.29 |
---|---|
[JS] async와 await (0) | 2021.03.23 |
[Vanilla JS] document ready 표현 (0) | 2021.02.22 |
[jQuery] best practice - event handling, ajax (0) | 2021.02.18 |
[JS] 화살표 함수 (0) | 2021.02.17 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JPA
- shell
- Git
- eureka
- terraform
- jQuery
- Puppeteer
- Node.js
- IntelliJ
- react
- Gradle
- postgresql
- Linux
- Vault
- javascript
- kotlin
- AWS IoT
- Docker
- Database
- 코딩테스트
- dev
- spring boot
- pgloader
- hashicorp
- mysql
- etc
- Spring Cloud Config
- JEST
- Java
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함