Spread, Rest parameter
이터러블 오브젝트(Iterable object)의 엘리먼트를 하나씩 분리하여 전개한다. 전개한 결과를 변수에 할당하거나 호출하는 함수의 파라미터 값으로 사용할 수 있다.
표현방식[…iterable]
변수 앞에 ‘…’을 찍어서 선언합니다.
Array Spread
let test = [1,2];
let post = [8,9];
let spread = [0,test,3,4,5,6,7,post];
console.log(spread);
//[0,1,2,3,4,5,6,7,8,9];
String Spread
let sSpread =["JAVASCIRPT"]
console.log(sSpread);
//[ 'J','A','V','A','S','C','I','R','P','T']
Object Spread
let sObj = [{name:1} , {name:2}];
let bObj = [{name:3}, sObj];
console.log (sObj); // [ { name: 1 }, { name: 2 } ]
console.log (bObj); // [ { name: 3 }, { name: 1 }, { name: 2 } ]
function Spread
const value = [10,20,30];
function abc( a,b,c){
console.log(a,b,c); };
abc(value); // 10 20 30
Rest Parameter
Rest 파라미터는 Spread 연산자(...)를 사용하여 함수의 파라미터를 작성한 형태Rest파라미터를 사용하면함수의 파라미터로 오는 값들을 배열로 전달받을 수 있다.
특징
다시 정의하자면함수를 호출할 때 spread 연산자
로 파라미터를 작성한 형태를Restparameter
라고 한다.
함수안의 코드를 확인하지 않고도 호출문의 형태만 보더라도 Rest parameter
의 범위를 확인할 수 있어 가독성이 높아진다. 또한 Rest parameter
는 Array, 즉 배열이므로 Array 오브젝트의 메서드를 사용할 수 있다. 그리고 arrow funtion
에서도 사용 가능하다.
표현방식파라미터 앞에 ‘…’을 찍어서 사용
console.log("===========");
function foo(x,y,z){
console.log(x);
console.log(y);
console.log(z);
}
const arr=[1,2,3];
foo(arr); // foo -> 1,2,3 담는다.
let price =[12,20,18] // 직접 하나씩 담아서 넣었던 방식이라면
Math.max(12,20,18);
let result =Math.max.apply(Math,price);
console.log(result);
console.log(Math.max(22,20,18));
let maxResult = Math.max(price); //한번에 spread로 쉽게 넣는다.
console.log(maxResult); // 같은 거라도 조금 더 가독성에도 도움이된다.
//function
let getElementByRestWithParam = (param, rest) => {
console.log(param);
console.log(rest);
}
console.log(getElementByRestWithParam.length); // 일단 1
console.log("======================");
const values = [10, 21, 30,40,50];
getElementByRestWithParam(values); //10 \n [21,30,40,50]
Rest parameter와 arguments의 차이
arguments
도 Array-like object
이기 때문에 for statement
로 전개할 수 있다.하지만 Array 오브젝트의 메서드를 사용할 수 없다.이것이 치명적인 단점인 것이다. 또 arrow function
에서는 arguments
를 사용할 수 없다.Rest parameter에 익숙해지기만 하면 arguments
를 통해 인자를 받는 것보다
'프로그래밍 > JAVA SCRIPT' 카테고리의 다른 글
[JS] What's new in ECMAScript 2020 (0) | 2020.05.23 |
---|---|
[ES6] Iteration & for..of 반복문 (0) | 2018.08.08 |
[ES6] Arrow-Function (화살표함수) (0) | 2018.08.06 |
[ES6] let & const (0) | 2018.07.31 |
[JavaScript] 자바스크립트 타입 및 연산자 (0) | 2018.06.07 |