一、扩展运算符的应用

ES6通过扩展元素符...,将一个数组转为用逗号分隔的参数序列

1
2
3
4
5
6
7
8
console.log(...[1, 2, 3])
// 1 2 3

console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5

[...document.querySelectorAll('div')]
// [<div>, <div>, <div>]

将某些数据结构转为数组

1
[...document.querySelectorAll('div')]

主要用于函数调用的时候,将一个数组变为参数序列

1
2
3
4
5
6
7
8
9
10
function push(array, ...items) {
array.push(...items);
}

function add(x, y) {
return x + y;
}

const numbers = [4, 38];
add(...numbers) // 42

更简单实现数组复制

1
2
3
const a1 = [1, 2];
const [...a2] = a1;
// [1,2]

数组合并

1
2
3
4
5
const arr1 = ['a', 'b'];
const arr2 = ['c'];
const arr3 = ['d', 'e'];
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e' ]

⚠️:通过扩展运算符实现的是浅拷贝,修改了引用指向的值,会同步反映到新数组

将字符串转为真正的数组

1
2
[...'hello']
// [ "h", "e", "l", "l", "o" ]

将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错

1
2
3
4
5
6
7
8
const [...butLast, last] = [1, 2, 3, 4, 5];
// 报错

const [first, ...middle, last] = [1, 2, 3, 4, 5];
// 报错

const [first, middle, ...last] = [1, 2, 3, 4, 5];
// last: [3,4,5]

二、构造函数新增的方法

关于构造函数,数组新增的方法有如下

  • Array.from()
  • Array.of()

Array.from()

将两类对象转为真正的数组:类似数组的对象和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)

1
2
3
4
5
6
7
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']

还可以接受第二个参数,用来对每个元素进行处理,将处理后的值放入返回的数组

1
2
Array.from([1, 2, 3], (x) => x * x)
// [1, 4, 9]

Array.of()

用于将一组值,转换为数组

1
Array.of(3, 11, 8) // [3,11,8]

没有参数的时候,返回一个空数组

当参数只有一个的时候,实际上是指定数组的长度

参数个数不少于 2 个时,Array()才会返回由参数组成的新数组

1
2
3
Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]