프론트엔드/React
NBC - JS 2주차 강의 정리 : 구조분해할당, 전개 구문(Spread Operator)
장쫑이이
2024. 7. 24. 09:31
구조분해할당
destructuing
de : not / structure : 구조
배열이나, 객체의 속성을 분해해서 변수에 넣는 방법
1. 배열의 경우 (순서가 중요)
let [value1, value2] = [1, "one"];
console.log(value1); // 1
console.log(value2); // "one"
let arr = ["value1", "value2", "value3"];
let [a, b, c, d] = arr;
console.log(a); // value1
console.log(b); // value2
console.log(c); // value3
console.log(d); // undefined (초기값이 설정되어있다면 4가 출력됨) ex) let [a, b, c, d=4] = arr;
2. 객체의 경우 (key가 중요)
let { name, age } = {
name: "jang",
age: 31,
};
console.log(name, age); // "jang", 31 출력
3. 새로운 이름으로 할당
let user = {
name: "jang",
age: 31,
};
let { name: newName, age: newAge } = user;
console.log(newName, newAge); // "jang", 31 출력
단축 속성명 : property shorthand
key와 value가 같으면 생략이 가능
const name = "jang";
const age = 30;
const user = {
name, // name의 경우 key와 value가 같으니 생략 가능
newAge: age
};
// console.log(user.name, user.age); // jang 30 출력
// key와 value의 이름이 값은 경우
const name = "jang";
const age = 30;
const user = { name, age }; // 배열같아 보이지만 객체
const user = { name: name, age: age }; // 위와 같음
전개 구문 : spred operator
반복 가능한 객체에 적용할 수 있는 문법.
배열이나 문자열 등을 요소 하나 하나로 전개 시킬 수 있음
const arr = [1, 2, 3, 4, 5];
const str = "string";
console.log(...arr); // 1 2 3 4 5
console.log(...str); // "s" "t" "r" "i" "n" "g"
배열
let arr = [1, 2, 3];
let newArr = [...arr];
console.log(...arr); // 1 2 3 출력
console.log(newArr); // [1,2,3] 출력
배열 병합
기존 concat 메서드를 이용했던 결합, ES6에서는 spread 연산자를 통해 더 깔끔하게 병합이 가능해졌다.
// 기존 방식
let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr = arr1.concat(arr2);
console.log(arr); // [ 1, 2, 3, 4, 5, 6 ]
// ES6 spread operator
let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr = [...arr1, ...arr2];
console.log(arr); // [ 1, 2, 3, 4, 5, 6 ]
추가로 보자면 이런 다양한 형태의 배열 병합을 수행 할 수 있다.
let arr1 = [1,2,3];
let arr2 = [4,5,6];
arr1.push(...arr2)
console.log(arr1); // [1,2,3,4,5,6]
let arr1 = [1,2];
let arr2 = [0, ...arr1, 3, 4];
console.log(arr2); // [0, 1, 2, 3, 4]
배열 복사
새로운 배열에 push를 해서 참조를 했다던지, map 함수로 배열을 복사했다면 ES6에서는 Spread 연산자를 활용해 편하게 가능해졌다.
// ES6 spread operator
let arr1 = ['철수','영희'];
let arr2 = [...arr1];
arr2.push('바둑이');
console.log(arr2); // [ "철수", "영희", "바둑이" ]
// 원본 배열은 변경되지 않습니다.
console.log(arr1); // [ "철수", "영희" ]
객체
객체 복사 또는 업데이트 가능
let user = {
name: "jang",
age: 30,
};
let user2 = { ...user };
console.log(user2); // { name: 'jang', age: 30 } 출력
객체의 복사 또는 프로퍼티를 업데이트 할 수 있다.
let currentState = { name: '철수', species: 'human'};
currentState = { ...currentState, age: 10};
console.log(currentState)// {name: "철수", species: "human", age: 10}
// 객체의 프로퍼티를 오버라이드 함으로써 객체가 업데이트
currentState = { ...currentState, name: '영희', age: 11};
console.log(currentState); // {name: "영희", species: "human", age: 11}
나머지 매개변수 : rest parameter
인자의 개수와 상관없이 모든 인자를 더하는 함수를 구현하기 쉬움
function exampleFunc(a, b, c, ...args) {
console.log(a, b, c); // 1 2 3 출력
console.log(...args); // 4 5 6 출력
console.log(args); // [4, 5, 6] 출력
}
exampleFunc(1, 2, 3, 4, 5, 6);