JavaScript语法之密集数组&稀疏数组&伪数组介绍

本文解析了密集数组和稀疏数组的概念,介绍了它们在不同编程语言中的表现形式,并详细讲解了如何在JavaScript中将稀疏数组转化为密集数组。同时,还探讨了伪数组的特点及将其转化为真数组的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、密集数组&稀疏数组

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值