es6又给数组提供了一些新的方法。
数组的扩展
扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
举个例子
Math.max(...[1,3,5])//5
就相当于
Math.max(1,3,5);//5
也就是说
...[1,3,5]就是把这个数组里的数都变成了函数的参数,就这么easy。
在比如
push原先只能在末尾插入一个元素,有了这个扩展运算符,现在就可以插入多个元素。
var arr1=[1,2,3]
var arr2=[4,5,6]
arr1.push(...arr2)//6
arr1//[1, 2, 3, 4, 5, 6]
就是说现在push可以完成concat的功能
var arr1=[1,2,3]
var arr2=[4,5,6]
arr1.concat(arr2)//[1, 2, 3, 4, 5, 6]
当然,合并数组还有更简单的写法。直接连起来ok
var arr1=[1,2,3]
var arr2=[4,5,6]
var s=[...arr1,...arr2]
s//[1, 2, 3, 4, 5, 6]
还可以和赋值结合起来
还可以将字符串转换为数组
[...'hello']//["h", "e", "l", "l", "o"]
Array.of()
Array.of方法用于将一组值,转换为数组。
举个例子
Array.of(3, 11, 8) // [3, 11, 8]
Array.of(3)//[3]
用array就行了,为啥要array.of?如下Array(3)生成的并不是数组,这就是个bug。
Array(3,11,8)//[3, 11, 8]
Array(3)//(3)
**Array.of基本上可以用来替代Array()或new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。
**
其实Array.of就是为了修正Array那个脑残的设计,也就是参数数目不一样时得出的类型不一样。
Array.from()
从一个类似数组或可迭代的对象中创建一个新的数组实例。
举个例子
把字符串转化为数组
Array.from('foo')//["f", "o", "o"]
把set转化为数组
let oppo=new Set(['apple','orange'])
Array.from(oppo)//["apple", "orange"]
更多参考
Array.from() - JavaScript | MDN
总结
扩展运算符极大的解决了数组的很多问题。of则是为了修复之前的bug。from则是把一些之前不是数组的转化为数组,因为数组有很多方法,用起来会很方便。