js之扩展运算符

490 阅读1分钟

扩展运算符(...)

作用一个数组转为用逗号分割的参数序列,通俗讲可以展开数组

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]