ECMA5为数组添加了很多有用的方法,比如forEach,map等,而ECMA 6也为数组添加些许有用的方法。
- Array.of()
- Array.from()
- Array.prototype.copyWithin()
- Array.prototype.find()
- Array.prototype.findIndex()
of
用于正确的创建一个数组,而不是像new Array('2') 或 new Array(2) 一样创建一个行为诡异的数组:
let arr = Array.of(2,'2')
from
可以从一个类似数组或可迭代的对象中创建一个新的数组实例:
function a(){
let arr = Array.from(arguments)
}
另外它可以传入一个函数来遍历操作,再返回。
copyWithin
方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,而不修改其大小:
let arr = [1,2,3,4]
arr.copyWithin(2,2) //[1, 2, 4, 4]
find
返回数组中满足提供的测试函数的第一个元素的值:
let arr = [1,2,3,4]
arr.find(v => v < 3) //1
findIndex
返回数组中满足提供的测试函数的第一个元素的索引,否则返回-1:
let arr = [1,2,3,4]
arr.findIndex(v => v < 3) // 0
新添加的方法不多,有兴趣的话可以通过MDN来查一查,了解了解。
但是,这一次,数组来一次跟数学计算有关的更新,中文翻译为定型数组,也就是ArrayBuffer以及相应的数值数据类型,这种数组专门用来处理数值类型,我目前能想到的场景,一种是canvas搞复杂动画,比如墨刀这样类型的产品,或者同时从内存中读取数据时。其余,我能想到的几乎很少,虽然这样,如果你有兴趣,可以仔细的研究一下。
let buffer = new ArrayBuffer(10)
console.log(buffer.byteLength)
你可以通过DataView来操作缓冲区:
let buffer = new ArrayBuffer(10)
let view = new DataView(buffer)
view.setInt8(0,5)
view.getInt8(0) // 5
具体的这些方法,你都可以通过MDN来查询。
对于定型数组来说与普通数组还是有一定差异的,虽然大部分方法相同。我们不能通过Array.isArray来检查定型数组,而且定型数组的是不可变的,数组反而可以通过push来自动增加length,定型数组只能依赖于初始化时分配的空间。当然定型数组也缺失了一些数组中的方法,比如:push,pop等可以改变空间的方法。
更多精彩内容可关注我的个人微信公众号:搜索fed-talk