扩展运算符 ...
扩展运算符...
将数组转换为以逗号隔开的参数序列
...
后面可以是一个表达式,表达式返回一个数组...
后面如果是空数组则不起任何作用
let m = 2,
arr = [...(m > 1 ? [1, 2] : [3, 4])];
function fn(a, b, c) {
return a + b + c;
}
console.log(fn(5, ...arr)); // 8
应用
替代applay
// 求数组最大值
// ES5
Math.max.apply(null, [5, 3, 7]);
// ES6
Math.max(...[5, 3, 7])
复制数组
完全复制,而非复制这个数组的引用
let arr = [3, 2, 5];
/* ES5 */
let a = arr.concat();
/* ES6 */
// 写法一
let b = [...arr];
// 写法二
let [...c] = arr;
console.log(a);
console.log(b);
console.log(c);
合并数组
let a = [1, 2],
b = [3],
c = [4, 5];
// ES5
let m = a.concat(b, c);
// ES6
let n = [...a, ...b, ...c];
console.log(m);
console.log(n);
和解构赋值结合
扩展运算符若用于赋值,只能放在最后,否则会报错
let [a,...b] = [1,2,3];
console.log(a); // 1
console.log(b); // [2,3]
// let [...b,a] = [1,2,3]; // 报错
let [m,...n] = [];
console.log(m); // undefined
console.log(n); // []
将具有Iterator接口的对象转换为数组
let a = [...'hello'];
console.log(a); // ["h", "e", "l", "l", "o"]
// querySelectorAll 方法返回的是 nodeList 对象,这个对象是类数组而不是真的数组,扩展运算符可将它转换为数组
let dvs = document.querySelectorAll('div'),
arr = [...dvs];
find,findIndex
find(fn,this),this可选,是 fn 的 this,对数组的每一项执行 fn ,直到找出第一个返回值为 true 的项,并返回该项,如果找不到符合条件的项则返回 undefined
findIndex 和 find 类似,返回第一个符合条件的项的位置,所有项都不符合的话返回 -1
fill
Array.from(a,fn)
- 任何具有 length 属性的对象,都可以被 Array.from() 转换为数组,如 nodeList,arguments
- a 若是真数组,则返回一个一模一样的新数组
Array.of()
Array.of()可接收多个参数,这些参数作为数组成员来生成一个数组
copyWithin()
接收三个参数,将数组指定位置的成员覆盖另一位置的成员,返回这个数组
。
。
。