稀疏数组
稀疏数组:索引不连续,数组长度大于元素个数的数组, 可以简单理解为有empty的数组,类似于empty元素代表这个位置没有初始化,
let arr1 = new Array(5);
console.log(arr1);
let arr = [1, 3, , ,];
console.log(arr);
empty与undefined
empty代表数组连这个索引都没有初始化,undefined是代表索引初始化了,只是存入的值是undefined
判断稀疏数组元素
通过in
let arr1 = [1, 3, , , , 45];
console.log(arr1, "arr1");
let len = arr1.length >>> 0;
let A = new Array(len);
for (let i = 0; i < len; i++) {
//判断原型是否有 i
if (i in arr1) {
console.log(arr1[i]);
}
}
所以稀疏数组在大多数遍历数组的方法中,遇到「empty」元素的时候,callback 函数是不会执行的,如:map等
具体的实现就是通过in判断的
所以在很多在自己实现map等遍历方法的时候都需要加一句 if (k in O)来排除empty元素
密集数组
密集数组:索引连续, 数组长度等于元素个数的数组
let arr = [1, 3, 4, 5, 2];
console.log(arr);