spread syntax 可以将 iterator 对象(如 array、string 等) 展开,在需要参数(如函数调用)或元素(如数组字面量)的地方。也可以在需要 key-value 的地方将对象表达式展开。
rest parameters 在赋值操作中收集剩余参数。
扩展运算符
代码示例:
Math.max(...[14, 3, 77])
let obj1 = { a:'1', b:'2'};
let obj2 = { c:'3', ...obj1 }; // {c: "3", a: "1", b: "2"}
let arr1 = [1,2,3];
let obj1 = { a: 'a', ...arr1 }; // {0: 1, 1: 2, 2: 3, a: "a"}
let obj2 = { a: 'a', b: 'b'};
let arr2 = [1, 2, 3, ...obj2]; // 报错,这里需要 iterator 对象
rest 参数
代码示例:
function add(...values) {
}
add(2, 5, 3) // 10
const [first, ...rest] = [1, 2, 3, 4, 5];
rest // [2, 3, 4, 5]
let { a, ...remain } = { a:'a', b:'b', c:'c' };