欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>