很简单啊,我就是想一下啊啊啊啊啊啊啊.
1.(...)相当于rest参数的逆运算,将一个数组转为用逗号分割的参数序列.
2.作用:
- 用于函数调用.
- 替代函数方法apply:因为扩展运算符可以展开数组,所以不需要再使用apply方法,将数组转为函数的参数.
- 用于数组字面量
eg1:
//将items的数组转换为参数序列,再进行push操作.
function push(array, ...items) {
array.push(...items);
}
eg2:扩展运算符后面还可以放置表达式
const arr = [...(x > 0) ? ['a'] : [], 'b'];
eg3:代替函数的apply方法:因为扩展运算符可以展开数组,所以不需要用apply方法,将数组转为函数的参数.
let args=[0,1,2];
function fun(x,y,z) {
//...
}
//es5
fun.apply(null,args);
//es6
fun(...args);
//es5
Math.max.apply(null,[14,3,77]);
//es6
Math.max(...[14,3,77])
3.应用
const a1=[1,2];
//第一种
const a2=[...a1];
//第二种
const [...a2]=a1;
let arr1=[1,2,3];
let arr2=["a","b"];
let arr3=["weiqiujuan","liuxiaotian"];
//es5
arr1.concat(arr2,arr3);
//es6
[...arr1,...arr2,...arr3];
//es5
a = list[0], rest = list.slice(1);
//es6
[a, ...rest] = list;
const [first, ...rest] = [];
first // undefined
rest // []
[...'hello']//['h','e','l','l','o']
对于没有部署Iterator接口的,可以使用Arrayfrom
将其转化为真正的数组.
let nodeList=document.querySelectorAll("div");//返回的是一个对象
let array=[...nodeList];//将其转换为真正的数组,NodeList对象实现了 Iterator 。
map:
let map = new Map([
[1, 'weiqiujuan'],
[2, 'liuxiaotian'],
[3, 'liudishizhu']
]);
let arr = [...mao.keys()];//[1,2,3]
Generator:函数运行后,返回一个遍历器对象,所以可以使用
const go=function *() {
yield 1;
yield 2;
yield 3;
};
[...go()];//[1,2,3]