-
稀疏数组:数组中的元素之间可以有空隙。
-
一般来说,js中的数组是稀疏的
稀疏数组
遍历:
ary.forEach((item)=>{
console.log(item);
})//什么也输不出
let ary1 = ary.concat(1,2);
ary1.forEach((item)=>{
console.log(item);
})//只能输出1,2
- 遍历时,forEach直接跳过了前面的"缝隙"
for(let i = 0;i < ary1.length;i++){
console.log(ary1[i]);
}//输出undefined,undefined,undefined,1,2
-
只有用最原始的for循环(不是for in)才能输出前面3个undefined,剩下的使用Array的方法均会跳过“缝隙”
-
这种情况也会生成稀疏数组:
var arr = [];
arr[0] = 0;
arr[100] = 100;
arr;//[0, empty × 99, 100]
- 数组元素只有两个但长度为101
密集数组
- 创建密集数组的技巧:
var a = Array.apply(null,Array(3));
a//[undefined, undefined, undefined]
-
实际上,JavaScript并没有常规的数组,所有的数组其实就是个对象,只不过会自动管理一些"数字"属性和length属性罢了。
-
说的更直接一点,JavaScript中的数组根本没有索引,因为索引应该是数字,而JavaScript中数组的索引其实是字符串:arr[1]其实就是arr["1"],给arr["1000"]=1,arr.length也会自动变为1001。
-
这些表现的根本原因就是:JavaScript中的对象就是字符串到任意值的键值对。注意键只能是字符串。不过目前,ES6中已经有了类似于Java等语言的Map类型,键可以是任意类型的值。