JavaScript语法之密集数组&稀疏数组&伪数组介绍
程序员文章站
2022-06-10 09:31:24
...
一、密集数组&稀疏数组
1、什么是密集数组呢?
在java和C语言中,数组是一片连续的存储空间,有着固定的长度。
如果数组arr,长度为n,那么占用的存储空间arr[0],arr[1],arr[2].......arr[n-1]
, 即数组元素之间是紧密相连的,不存在空隙。
2、什么是稀疏数组呢?
与密集数组相反,javascript并不强制要求数组元素是紧密相连的,即允许间隙的存在。
3、通过Array的apply方法稀疏数组转为稀疏数组
总结:密集数组和稀疏数组都是真数组;不要使用稀疏数组;
<script type="text/javascript">
/*
什么是密集数组呢?
在java和C语言中,数组是一片连续的存储空间,有着固定的长度。
加入数组其实位置是address,长度为n,那么占用的存储空间是address[0],address[1],address[2].......address[n-1]。
即数组元素之间是紧密相连的,不存在空隙。
什么是稀疏数组呢?
与密集数组相反,javascript并不强制要求数组元素是紧密相连的,即允许间隙的存在。
总结:密集数组和稀疏数组都是真数组;不要使用稀疏数组;
*/
//稀疏数组
var b = new Array(3);
console.log(b);
b.map(function(v, i) {
console.log(i)
})
//将稀疏数组转为稀疏数组
var c = Array.apply(null, b);
console.log(c);
c.map(function(v, i) {
console.log(i)
})
</script>
二、伪数组&真数组
1、伪数组定义
伪数组:具有length属性;不具有数组的方法;
2、 如何将伪数组转为真数组?
第一种:通过Array的apply方法;
var c = Array.apply(null, b);//b:伪数组;c:返回的真数组;
第二种:Array.prototype.slice的call和apply方法改写内部的this指向
var arr = Array.prototype.slice.call(obj);
var arr = Array.prototype.slice.apply(obj);
3、代码示例:
<!--伪数组(类数组):具有length属性,下标为数值的对象。-->
<script type="text/javascript">
//正常数组
var a = Array.apply(null, {
length: 3
});
console.log(a);
a.map(function(v, i) {
console.log(i)
})
//伪数组:具有length属性;不具有数组的方法;
var obj = {};
obj.length = 3;
obj[0] = 0;
obj[1] = 1;
obj[2] = 2;
// 将伪数组转换为数组:Array.prototype.slice(内部this——>[])
var arr = Array.prototype.slice.call(obj);
// var arr = Array.prototype.slice.apply(obj);
console.log(arr);
arr.map(function(v, i) {
console.log(i)
})
</script>
上一篇: html5构建离线web应用