35μ₯ μ€νλ λ λ¬Έλ²
ES6μμ λμ λ μ€νλ λ λ¬Έλ²(μ κ° λ¬Έλ²) ...μ νλλ‘ λμ³ μλ μ¬λ¬ κ°λ€μ μ§ν©μ νΌμ³μ κ°λ³μ μΈ κ°λ€μ λͺ©λ‘μΌλ‘ λ§λ λ€. μ€νλ λ λ¬Έλ²μ μ¬μ©ν μ μλ λμμ for...of λ¬ΈμΌλ‘ μνν μ μλ μ΄ν°λ¬λΈμ νμ λλ€.
// ...[1,2,3]μ [1,2,3]μ κ°λ³ μμλ‘ λΆλ¦¬νλ€.
console.log(...[1,2,3]); // 1 2 3
// λ¬Έμμ΄μ μ΄ν°λ¬λΈμ΄λ€
console.log(...'hello'); // h e l l o
// μ΄ν°λ¬λΈμ΄ μλ μΌλ° κ°μ²΄λ μ€νλ λ λ¬Έλ²μ λμμ΄ λ μ μλ€.
console.log(...{a : 1}) // TypeError λ°μ
μ¬κΈ°μ μ£Όμν΄μΌ ν μ μ μ€νλ λ λ¬Έλ²μ κ²°κ³Όλ κ°μ΄ μλλΌ κ°λ€μ λͺ©λ‘μ΄λ€. μ΄λ μ€νλ λ λ¬Έλ² ...μ΄ νΌμ°μ°μλ₯Ό μ°μ°νμ¬ κ°μ μμ±νλ μ°μ°μκ° μλμ μλ―Ένλ€. λ°λΌμ μ€νλ λ λ¬Έλ²μ κ²°κ³Όλ μ§μ λ³μμ ν λΉν μ μλ€.(κ°μ΄ μλλ―λ‘)
// μ€νλ λ λ¬Έλ²μ κ²°κ³Όλ κ°μ΄ μλλ€!!
const spread = ...[1,2,3]; // SyntaxError λ°μ
μ€νλ λ λ¬Έλ²μ κ²°κ³Όλ¬Όμ κ°μΌλ‘ μ¬μ©ν μ μκ³ μΌνλ‘ κ΅¬λΆν κ°μ λͺ©λ‘μ μ¬μ©νλ λ¬Έλ§₯μμλ§ μ¬μ©ν μ μλ€.
1. ν¨μ νΈμΆλ¬Έμ μΈμ λͺ©λ‘μ ... μ¬μ©
2. λ°°μ΄ λ¦¬ν°λ΄μ μμ λͺ©λ‘μ ... μ¬μ©
3. κ°μ²΄ 리ν°λ΄μ νλ‘νΌν° λͺ©λ‘μ ...μ¬μ©
35.1 ν¨μ νΈμΆλ¬Έμ μΈμ λͺ©λ‘μμ μ¬μ©νλ κ²½μ°
μμλ€μ μ§ν©μΈ λ°°μ΄μ νΌμ³μ κ°λ³μ μΈ κ°λ€μ λͺ©λ‘μΌλ‘ λ§λ ν, μ΄λ₯Ό ν¨μμ μΈμ λͺ©λ‘μΌλ‘ μ λ¬ν΄μΌ νλ κ²½μ°κ° μλ€.
const arr = [1, 2, 3];
const max = Math.max(...arr);
console.log(max); // 3
μμ μ½λμ²λΌ ν¨μ νΈμΆλ¬Έμ μΈμ λͺ©λ‘μ λ°°μ΄μ μμλ€μ νλ νλ κΊΌλ΄μ μ λ¬ ν νμμμ΄ μ€νλ λ λ¬Έλ²μ ν΅ν΄ λ°°μ΄λ΄μ μμλ€μ λͺ©λ‘μ νΌμ³μ ν¨μ νΈμΆλ¬Έμ μΈμλͺ©λ‘μ ν λ²μ μ λ¬ν μ μλ€.
35.2 λ°°μ΄ λ¦¬ν°λ΄ λ΄λΆμμ μ¬μ©νλ κ²½μ°
μ€νλ λ λ¬Έλ²μ λ°°μ΄ λ¦¬ν°λ΄μμ μ¬μ©νλ©΄ ES5μμ μ¬μ©νλ κΈ°μ‘΄μ λ°©μλ³΄λ€ λμ± κ°κ²°νκ³ κ°λ μ± μ’κ² ννν μ μλ€.
35.2.1 concat
ES5μμ 2κ°μ λ°°μ΄μ 1κ°μ λ°°μ΄λ‘ κ²°ν©νκ³ μΆμ κ²½μ° λ°°μ΄ λ¦¬ν°λ΄λ§μΌλ‘ ν΄κ²°ν μ μκ³ concat λ©μλλ₯Ό μ¬μ©ν΄μΌ νλ€.
var arr = [1,2].concat([3,4]);
console.log(arr); // [1, 2, 3, 4]
νμ§λ§ μ€νλ λ λ¬Έλ²μ μ¬μ©νλ©΄ λ³λμ λ©μλλ₯Ό μ¬μ©νμ§ μκ³ λ°°μ΄ λ¦¬ν°λ΄λ§μΌλ‘ 2κ°μ λ°°μ΄μ 1κ°μ λ°°μ΄λ‘ κ²°ν©ν μ μλ€.
const arr = [...[1,2],...[3,4]];
console.log(arr); // [1, 2, 3, 4]
35.2.3 λ°°μ΄ λ³΅μ¬
ES5μμ λ°°μ΄μ 볡μ¬νλ €λ©΄ slice λ©μλλ₯Ό μ¬μ©νλ€.
var origin = [1, 2];
var copy = origin.slice();
console.log(copy); // [1, 2]
console.log(copy === origin); // false
μ€νλ λ λ¬Έλ²μ μ¬μ©νλ©΄ λμ± κ°κ²°νκ³ κ°λ μ± μ’κ² ννν μ μλ€.
var origin = [1, 2];
var copy = [...origin];
console.log(copy); // [1, 2]
console.log(copy === origin); // false
35.3 κ°μ²΄ 리ν°λ΄ λ΄λΆμμ μ¬μ©νλ κ²½μ°
μ€νλ λ λ¬Έλ²μ λμμ μ΄ν°λ¬λΈμ΄μ΄μΌ νμ§λ§ μ€νλ λ νλ‘νΌν° μ μμ μΌλ° κ°μ²΄λ₯Ό λμμΌλ‘λ μ€νλ λ λ¬Έλ²μ μ¬μ©μ νμ©νλ€.
// κ°μ²΄ 볡μ¬
const obj = {x : 1, y : 2};
const copy = {...obj};
console.log(copy); // {x: 1, y: 2}
console.log(obj === copy); // false
//κ°μ²΄ λ³ν©
const merged = {x : 1, y : 2, ...{a : 3, b : 4}};
console.log(merged); // {x: 1, y: 2, a: 3, b: 4}
μ΄μ²λΌ μ€νλ λ λ¬Έλ²μ νμ©νλ©΄ κΈ°μ‘΄μ λ©μλλ₯Ό νμ©νμ¬ κ΅¬νν΄μΌ νλ λμλ€μ κ°λ μ± μ’κ³ νΈλ¦¬νκ² κ΅¬νν μ μλ€.