扩展运算符(...)
作用一个数组转为用逗号分割的参数序列,通俗讲可以展开数组
console.log(1,…[1,2,3], 4)
用途
(1)替代数组的apply方法:求数组最大值、将一个数组添加到另一个数组后面
var a = [1,2,3];
Math.max(...a)//3
(2)合并数组,Array.push(…arr)
var a = [1,2,3];
var b = [];
b.push(...a)//b=[1,2,3]
(3)和解构赋值结合,形成数组 赋值,会将空位转为undefined 函数参数function(a, …arr)
const [a, ...b] = [1,2,3];//a=1,b=[2,3]
function fun(a, ...arr){
//
}
fun(...[1,2,3])
(4)将字符串转成真正的数组,避免将大于\uffff的unicode字符当做2个字符处理
var a = 'hello';
[...a]//['h','e','l','l','o']
(5)实现部署Iterator接口的对象,转成数组
类似数组对象: nodelist,arguments,{length:3}。本质特征只有一点,必须有length属性。只能使用Array.from
部署iterator接口对象:set、字符串。可以使用扩展运算符和Array.from 后面可以跟表达式
Map和Set结构、Generator函数,实现了Iterator接口
let map = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three']
]);
[...map.values()]//['one', 'two', 'three']
const go = function* (){
yield 1;
yield 2;
yield 3;
}
[...go()]//[1,2,3]