[JS] JavaScript의 최신 기능 (스프레드 연산자, Rest 매개변수)

2025. 2. 5. 23:51·기초 학습/JavaScript

기본 매개변수

함수를 쓸 때 매개변수가 있으면 그걸 쓰고 없으면 기본 매개변수의 값을 사용한다.
디폴트 매개변수는 여러 개 사용할 수 있지만,

function rollDie(numSides = 6) {

}

스프레드 연산자

스프레드 연산자를 사용하면 배열과 같이 반복 가능한 객체를 전개구문을 사용해 확장한다.

반복 가능한 객체를 펼치면 어떻게 되는가?

배열 펼치기

Math.max(1,3,6,15,25,4,23,99,45,101,143,21,5); //143

const nums = [1,3,6,15,25,4,23,99,45,101,143,21,5];
Math.max(nums); //NaN - not a number
Math.max(...nums); //143 - 배열이 펼쳐지고 인수는 따로 따로 들어가게 된 것이다!

console.log(nums); //[1,3,6,15,25,4,23,99,45,101,143,21,5]
console.log(...nums); //1,3,6,15,25,4,23,99,45,101,143,21,5

//문자열 한 덩어리가 문자 하나하나로 분리됐다!
console.log("hello"); //hello
console.log(..."hello"); //h e l l o

배열 펼쳐서 합하기

const dog = ['모리', '제리'];
const cat = ['나비', '']
const catDog = [...cat, ...dog, '강아지', '고양이'];

객체 리터럴에서 스프레드 연산자 사용하기

객체 리터럴에서는 스프레드 연산자를 사용해서 객체에 있는 특성을 복사해 새로운 객체를 만들 수 있다. 또한 객체 여러 개를 묶어 하나의 객체로 만들 수 있다.

const catDog = {...feline, ...canine}

동일한 특성이 있는 경우, 덮어쓰기가 일어난다.

{...[2,4,6,8]} // 키: 인덱스 / 값: 배열의 원소 {0: 2, 1: 4, 2: 6, 3: 8}
{..."hello"} 

이렇게 자주 작업하지는 않으나 이렇게 할 수 있음.

인수 객체

인수 객체는 배열같은 오브젝트로, 함수로 전달된 인수를 모두 갖는 객체이다.

function sum(){
 console.log(arguments);
}

이 인수 객체는 모든 인수를 자동으로 모아준다. 이 때 화살표 함수 안에서는 arguments객체를 사용할 수 없다. 화살표 함수는 this와 arguments를 생성하지 않기 때문에, 상위 스코프의 arguments를 참조한다.

그러나arguments는 객체타입이므로 배열 메서드를 사용할 수 없다

Rest Parameter

나머지 연산자를 사용하여 남아있는 모든 인수를 모아 하나의 배열로 나타낼 수 있다.

function sum(...nums){
  console.log(nums);
  return nums.reduce((total, el) => total + el);
}

배열 구조 분해

const [gold, silver, bronze, ...everyoneElse] = scores;

객체 구조 분해

//01. 기본틀
const firstName = user.firstName
const lastName = user.lastName
const emial = user.email

const { firstName, lastName, email } = user

//02. 변수명을 키 값과 다르게 짓기
const { born : birthYear } = user;

//03. 디폴트값 주기
const {city, state, died = 'N/A'} = user2;

매개변수 구조 분해

function fullName(user){
  const { firstName, lastName } = user;
  return `${firstName} ${lastName}`;
}
function fullName({ firstName, lastName }){ 
  return `${firstName} ${lastName}`;
}

이런식으로도 이용할 수 있다

movies.filter( (movie) => movie.score >= 90)
movies.filter( ({ score }) => score >= 90)
movies.map(movie => {
  return `${movie.title} (${movie.year}) is rated ${movie.score}`
})
movies.map({title, year, score} => {
  return `${title} (${year}) is rated ${movie.score}`
})

'기초 학습 > JavaScript' 카테고리의 다른 글

[JS] Javascript의 배열 변형 메서드 (forEach, map, filter, reduce)  (0) 2025.01.31
[JS] JavaScript 함수 기초  (0) 2025.01.30
[JS] 객체 리터럴  (0) 2025.01.23
[JS] 자바스크립트의 배열  (1) 2025.01.22
[JS] 비교 연산자 ( ==와 ===의 차이)  (0) 2025.01.21
'기초 학습/JavaScript' 카테고리의 다른 글
  • [JS] Javascript의 배열 변형 메서드 (forEach, map, filter, reduce)
  • [JS] JavaScript 함수 기초
  • [JS] 객체 리터럴
  • [JS] 자바스크립트의 배열
뜐🐸
뜐🐸
패왕색 패기를 갖춘 뜐입니다~
  • 뜐🐸
    뜐의 개발 로그
    뜐🐸
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기초 학습
        • HTML
        • CSS
        • JavaScript
        • Version Co..
        • 미니 프로젝트
        • DOM & 웹 AP..
      • CSS 프레임워크
        • Bootstrap
      • React
        • 개념 정리
        • 기초 정리
      • 알고리즘
        • Week 1: 입출..
        • 재귀
        • 백트래킹
      • javascript
      • FastAPI
        • 크롤링 서버 만들기
      • 전역 상태 관리
        • Redux
      • 한 입 리액트 챌린..
      • 영어
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    :focus
    :nth-child(n)
    :active
    백준 #코딩테스트 #1074번 #재귀 #알고리즘 # 알고리즘 문제풀이
    가상 선택자
    inline-block
    자바스크립트 #하노이 탑 #재귀 #백준 # 11729
    오블완
    티스토리챌린지
    :hover
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜐🐸
[JS] JavaScript의 최신 기능 (스프레드 연산자, Rest 매개변수)
상단으로

티스토리툴바