稀疏数组和密集数组。
密集数组: 占据连续的内存空间,数组元素之间紧密相连,不存在empty
稀疏数组:数组元素之间存在间隙。
ex:
const arr1 = [1,2,3] 这样定义的一个 数组 arr1 就是一个密集数组
const arr2 = [1,2,3]
arr2[8] = 8
打印arr2 会发现 :
[12, 3, 4, empty × 5, 8],输出结果是这样的,中间有五个空 empty。像这样的数组就称之为稀疏数组。
稀疏数组的特点: 无法 通过 filter,map等方法处理这些个empty 值。 因为 阅读 filter,map 源码, 里面都设置及到一个 in 操作符。 然而 empty的 索引值 去 使用 in 操作时,一律都是 false ,arr2第一个empty出现在3 索引 但是 3 in arr2 =》 返回 false。所以 使用 foreach, filter, map 等去处理这些empty值的时候都不会成功。
//得到稀疏数组。
const arr = new Array(3) => 会得到稀疏数组。
//得到密集数组的几种方法:
Array.apply(null, Array(3))
Array.from({length:3},() =>{}); 这里传入一个包含长度的对象和 回调,回调用于对生成的数组的每个元素进行处理。
Array(3).fill(undefined); //从这里看出 这三种方式默认都是生成长度为3,数组元素都是undefined的数组!!!