//…..[1, 2, 31은 [1, 2, 3]을 개별 요소로 분리한다(1, 2, 3)
console. log(... [1, 2, 31); // 1 2 3
//문자열은 이터러블이다.
console.log(... 'Hello'); // H e l l o
//Map과 Set은 이터러블이다.
console. log(... new Map([['a', '1'], ['b', '2']])); // [ 'a', '1' ] [ 'b', '2' ]
console. log( ... new Set([1, 2, 3])); // 1 2 3
//이터러블이 아닌 일반 객체는 스프레드 문법의 대상이 될 수 없다.
console. log( ... { a: 1, b: 2 });
// TypeError: Found non-callable @@iterator
//스프레드 문법의 결과를 변수에 할당할 수 없다.
const list = ...[1,2,3]; // SyntaxError
//Rest
function foo (...rest){
console.log(rest); // 1,2,3 -> [1,2,3]
}
// Spread
//[1,2,3] => 1,2,3
foo(...[1,2,3]);
const arr= [1,2,3];
const max = Math.max(arr); // NaN
const max = Math.max(...arr); // 3
// 위와 같다
const max = Math.max.apply(null,arr); // 3
아래 코드는 참고하기 위해 원본 배열 손상과 변수 사용등의 대한 고려는 잠시 내려두고 참고하길 바란다.
//배열 결합 - concat 사용
//ES5
var arr= [1,2].concat([3,4]);
console.log(arr); // [1,2,3,4]
//ES6
const arr = [...[1,2], ...[3,4]];
console.log(arr); // [1,2,3,4]
//배열 수정 - splice 사용
//ES5
var arr1 = [1,4];
var arr2 = [2,3];
arr1.splice(1,0,arr2)
console.log(arr1); // [1,[2,3],4]
//ES6
const arr1 = [1,4];
const arr2 = [2,3];
arr1.splice(1,0,...arr2);
console.log(arr1); // [1,2,3,4]
// 배열 복사 - slice
var origin = [1,2];
var copy = origin.slice();
console.log(copy); // [1,2]
console.log(copy === origin); //false
//ES6
const origin = [1,2];
const copy = [...origin]; // 얕은복사
console.log(copy); // [1,2]
console.log(copy === origin); //false
추가적으로 객체에서도 스프레드 문법을 사용할 수 있다.
스프레드 문법과 마찬가지고 배열 구조분해 할당의 대상은 이터러블이어야 하며 할당 기준은 배열의 인덱스다.
const [a,b] = [1,2];
console.log(a,b) // 1 2
const [c,d] = [1,2,3];
console.log(c,d) // 1,2
const [e,f,g] = [1,2];
console.log(e,f) // 1 2 undefined
const [h,i,j=3] = [1,2];
console.log(h,i,j) // 1 2 3
const [k,l=5,m=9] = [1,2];
console.log(k,l,m) // 1 2 9
const [q,w] = {} // TypeError
const [x,y]; // SyntaxError
const user = {firstName: ' Joe', lastName: 'Ho'};
// 축약표현 사용
const {lastName, firstName} = user ;
// 위와 아래는 동치다.
const {lastName:lastName, firstName:firstName} = user ;
// 변수이름과 프로퍼티 키를 다르게 사용하고 싶으면
const {lastName: ln, firstname: fn} = user;
console.log(fn,ln); // Joe Ho