一、JavaScript稀疏数组
首先,我们来说一下什么是JavaScript稀疏数组,我们知道定义一个数组的时候可以使用对象实例:
var arr=new Array(3);
上面创建方法我们只是声明了有三个元素的数组,这个时候它的length=3,但是我们并没有给每个项赋值,这个时候for循环每个项,输出的结果都是undefined:
for(var i=0;i<arr.length;i++)
{
cosole.log(arr[i]);//undefined
}
这个大家都比较了解,下面我们给其中几个项赋值:
arr[0]=1;
arr[2]=2;
大家注意这里我并没有给arr[1]赋值,这个时候arr[1]=undefined;
而这种的数组我们就称作为稀疏数组,也就是数组的元素如果不是连续有值,我们就称作为稀疏数组。
说白了js中建立稀疏数组非常easy,仅仅要你有益让数组元素之间存在间隙就可以。如
var arr = [];
arr[0] = 0;
arr[200] = 200;
二、密集数组
什么是密集数组呢?在java和C语言中,数组是一片连续的存储空间,有着固定的长度。增加数组事实上位置是address。长度为n。那么占用的存储空间是address[0],address[1],address[2].......address[n-1]。即数组元素之间是紧密相连的,不存在空隙。例如以下的js代码创建的就是一个密集数组
var data = [3,1,6,9,2];
// 密集数组
var dense = Array.apply(null, Array(3));
dense[2] = "name";
for(var a in dense)
{
console.log("index=" + a + ",value=" + dense[a]);
}
三、区别
//稀疏数组
var array = new Array(3);
array[2] = "name";
for(var a in array)
{
console.log("index=" + a + ",value=" + array[a]);
}
// 密集数组
var dense = Array.apply(null, Array(3));
dense[2] = "name";
for(var a in dense)
{
console.log("index=" + a + ",value=" + dense[a]);
}
能够看到确实是有区别的:稀疏数组仅仅遍历了一次(由于仅仅有一个元素),密集数组遍历了3次。