강좌의 let, const 변수 사용 기준
let, const 변수의 시맨틱을 우선하여 사용
const list = [10, 20];
let values = [10, 20];
values.push(30, 40);
for (let k = 0; k < list.length; k++){};
const book = (param) => param + 10;
Syntax: [...iterable]
const list = [21, 22];
log([11, ...list, 12]);
const obj = {key: 50};
log({...obj});
// [11, 21, 22, 12]
// {key: 50}
이터러블 오브젝트를 하나씩 전개
{key: value}의 Object가
강좌의 용어 사용 기준
/*
1. ...one
one 배열의 [21, 22]를 엘리먼트 단위로 분리(전개)
2. ...two 위치에
two 배열의 [31, 32]를 엘리먼트 단위로 분리(전개)
*/
const one = [21, 22];
const two = [31, 32];
const result = [11, ...one, 12, ...two];
log(result);
log(result.length);
// [11, 21, 22, 12, 31, 32]
// 6
/*
앞에 11과 12가 있지만 값을 대체하지 않고 ...을 작성한 위치에 전개
*/
const one = [11, 12];
const result = [11, 12, ...one];
log(result);
log(result.length);
// [11, 12, 11, 12]
// 4
/*
[...target]:
target의 "ABC"를 문자 단위로 분리하여 ...target 위치에 설정
*/
const target = "ABC";
log([...target]);
// [A, B, C]
// ...one : one 오브젝트의 프로퍼티를 전개
const one = {key1: 11, key2: 22};
const result = {key3: 33, ...one};
log(result);
// {key3: 33, key1: 11, key2: 22}
/*
1. {book: 30}과 {book: 10}에서 프로퍼티 이름이 같으므로 30이 뒤에 작성한 10으로 대체됨
2. Object는 이터러블 오브젝트가 아니므로 [...one] 형태로 작성하면 에러 발생
*/
const one = {book: 10, music: 20};
const result = {book: 30, ...one};
log(result);
//const check = [...one];
// {book: 10, music: 20}
/*
1. result 배열 끝에 첨부
2. 배열이면 엘리먼트로 분리하여 첨부하고 문자열이면 문자 단위로 분리하여 첨부
*/
let result = [21, 22];
const five = [51, 52];
result.push(...five);
log(result);
result.push(..."abc");
log(result);
// [21, 22, 51, 52]
// [21, 22, 51, 52, a, b, c]
function add(one, two, three){
log(one + two + three);
};
const values = [10, 20, 30];
add(...values); // one:10, two:20, three:30이 매핑됨
// 60
function point(...param){
log(param);
log(Array.isArray(param));
};
const values = [10, 20, 30];
point(...values); // one:10, two:20, three:30이 매핑됨
// [10, 20, 30]
// true
작성 방법
파라미터와 Rest 파라미터 혼합 사용
/*
1. ten에 10이 설정되고
2. 설정되지 않은 나머지 값 전체가 파라미터 rest에 설정됨. 그래서 rest 파라미터
3. 나머지라는 시맨틱을 나타나기 위해 파라미터 이름을 rest로 사용하기도 함
*/
function point(ten, ...rest){
log(ten);
log(rest);
};
const values = [10, 20, 30];
point(...values);
// 10
// [20, 30]
/*
1. length 프로퍼티는 전개되지 않음
2. for~in 문으로 전개하면 length 프로퍼티도 전개됨
*/
const values = {0: "가", 1: "나", 2: "다", length: 3};
for (let k = 0; k < values.length; k++){
log(values[k]);
};
// 가
// 나
// 다
Argumnet 오브젝트
__proto__
가 Objectrest 파라미터
__proto__
가 Array