一、扩展运算符的应用
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()
将两类对象转为真正的数组:类似数组的对象和可遍历(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]
|