### 扩展运算符
1. ...将数组转换为用逗号分隔的参数序列:...[1,2,3] => 1,2,3 [...doucment.querySelectorAll('div')] => [ div, div, div ]
2. ...后可以跟表达式:...( x > 1 ? [ 1 ] : [ ] ) 空数据不产生任何效果
3. 替代apply函数调用时的数组传参
4. 求最大值:Math.max( ...[1,2,3] )
6. 合并数组:[ ..arr1, ...arr2 ] [ 1,2,3 ].push( ...[ 4,5,6 ] )
7. 复制数组 const arr1 = [ ...arr2 ]
8. 与解构赋值一起使用时,扩展运算符只能放在最后:const [ a, ...b ] = [ 1,2,3,4 ] a:1 b:[ 2,3,4 ]
9. 转换字符串:[ ...'hello' ] => [ h,e,l,l,o ]
10. 任何部署了Iterator接口的数据结构都可以转换为数组,只要部署了Iterator接口,就可以使用扩展运算符
### 数组扩展
1. Array.from():将类数组对象和具有iterator接口的对象转换为真正的数组
类数组对象最大的特征,是拥有length属性,只要有这个属性就可以转换为真正的数组:arguments || NodeList( DOM集合 )
Array.from可以接收第二个参数:为一个函数,相当于map方法,对转换的每个类数组元素进行处理
2. Array.of():创建数组,解决Aarry()函数创建数组时因参数个数不同产生的差异结果
[ ].find( fn ):查找第一个符合条件的元素
[ ].findIndex( fn ):查找第一个符合条件的元素索引
3. Array.includes() Array.keys() Array.values() Array.entries()
4. [ ].flat():将多维数组转换为一维数组,传入Infinity将多级数组转平,默认只转一级
5. 数组方法较多,ES5 ES6各个方法对于数组内的空位处理不一致,需要避免这个问题