数组的扩展

1. 扩展运算符

它是rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。

  • 可用来代替数组的apply方法:
var args = [0,1,2];
//ES5
f.apply(null,args);
Math.max.apply(null,args);
Array.prototype.push.apply(arr1,arr2);
//ES6
f(...args);
Matn.max(...args);
arr1.push(...arr2);
  • 可用来合并数组,也可以将某些数据结构转为数组。(注意扩展运算符调用的是interator接口,如果一个对象没有部署该接口,就无法转换。不支持转换类似数组的对象)
//ES5
arr1.concat(arr2,arr3);
//ES6
[...arr1,...arr2,...arr3];
  • 与解构赋值合并
    注意扩展运算符用于解构赋值时,只能将参数放在最后一位,否则会报错。
  • 用于函数的返回值,返回数组或对象返回多个值
  • 将字符串转为真正的数组,好处是能正确识别32位的unicode字符。
[...'hello'];//['h','e','l','l','o']
  • 实现了Interator接口的对象
    任何Interator接口的对象都可使用扩展远算符转为真正的数组。比如Map,Set数据结构,Generator函数。

2. Array.from()

该方法用于将两类对象转为真正的数组:类似数组的对象,可遍历的对象。支持转换类似数组的对象(即必须有length属性)。
可接受第二个参数,作用类似于数组的map方法,将每个元素处理,处理后的值放入返回的数组。
可接受第三个参数用来绑定this。
另一个应用是将字符串转为数组,并正确返回字符串的长度。因为它能正确处理各种unicode字符,可以避免将大于\uFFFFFF的unicode字符算作两个字符。

//ES5 
var arr1 = [].splice.call(arraylike);
//ES6
var arr2 = Array.from(arraylike);

3. Array.of()

用于将一组值转换为数组。弥补了Array()构造函数的不足。(因为参数个数的不同会导致Array()的行为有差异,0个参数返回空数组;一个参数指定数组的长度,值为空,两个或两个以上参数返回由参数组成的新数组。

4. 数组实例copyWith()

会在当前数组内部将指定位置的成员复制到其它位置(覆盖原有成员),会修改原数组。
接受三个参数:
target:必选,从该位置开始替换数据。
start:可选,从该位置开始读取数据。
end:可选,到该位置前停止读取数据。

5. 数值实例的find()和findIndex()

都用于查找出第一个符合条件的数组成员,返回该成员。区别是find如果没有找到返回undefined,findIndex如果没有找到返回-1。可接收第二个参数绑定回调函数的this。
此外,这两个方法可发现NaN,弥补了indexOf的不足。(因为indexOf内部使用严格相等运算进行判断,会导致对NaN误判。

6. 数组实例的fill()

使用一个定值填充一个数组。会覆盖已有的元素。
可接受第二和第三个参数,用于指定填充的起始和结束位置。

7. 数组实例的keys()、values()、entries()

用于遍历数组,都返回一个遍历器对象,可用for...of循环遍历。
区别在于分别对键名、键值、键值对遍历

8. 数组实例的includes()

返回一个布尔值,第二个参数表示搜索的起始位置,如果大于数组长度会重置为从0开始.

9. 数组的空位

注意空位不是undefined。

0 in [undefined,undefined,undefined];//true
0 in [, , ,];//false

ES5对空位的处理不一致,大多数情况会忽略空位
ES6明确将空位转为undefined

posted @ 2020-10-02 21:52  小耳朵兔  阅读(142)  评论(0)    收藏  举报