js引用类型基础——数组

别来无恙 提交于 2020-02-21 23:46:13

数组,顾名思义就是将一组数组合在一起,即数组是数据的有序集合。
js数组是无类型的,数组元素可以是任意类型数据,
js数组是动态的,根据需要它们会增长或缩减。
我们知道数组是对象,数组的索引其实相当于对象的属性名,只不过这里只能用方括号来访问。



 

  1. 创建数组
    (1)构造函数法
    使用Array()构造函数可以创建一个数组。
    var a = new Array();          //创建一个新数组
    var b = new Array(10);        //创建长度为10的空数组,10并非是数组元素个数的上限

    (2)字面量表示法
    使用方括号创建数组,数组元素用逗号隔开。

    var color = ["blue","red","yellow"];
    var count = [1,,3];                        //数组有3个元素,中间的元素为undefined
    var undefs = [,,,];                        //不要这样写,会被当做3或者4个元素,视浏览器而定

    上述数组count中间的元素若显式的定义为undefined,情况略有不同

    虽然二者的数组长度都是3,但是前者是个稀疏数组,元素个数只有2,后者是稠密数组,元素个数为3。

  2. 数组长度
    数组有一个length属性,一般情况下,length属性值等于数组元素的个数。当数组是稀疏数组时length值大于数组元素个数
    数组长度是动态的,因此可以通过改变length属性值来增删数组元素

    当然数组既然是对象,也就继承了对象的方法,我们可以通过Object.defineProperty()让数组的length属性变成只读的
    var a = [1,2,3];
    Object.defineProperty(a, "length", {writable:false});
    a.length = 0;    //该操作无效
  3. 数组元素的添加和删除
    添加数组元素最简单的方法是为新索引赋值
    var a = [];         //开始是一个空数组
    a[0] = "zero";      //向其中添加元素
    a[1] = "one";

    也可以使用push()方法在数组末尾添加一个或者多个元素

    var a = [];             //开始创建一个空数组
    a.push("zero");         //在末尾添加一个元素,a=["zero"],方法返回1
    a.push("one","two");    //再添加两个元素,a = ["zero","one","two"],方法返回3

    该方法返回的新数组的长度。
    要想在数组首部插入一个元素可以使用unshift()方法,同样也是返回新数组的长度
    删除数组元素可以用以上的length属性,也可以像删除对象属性一样使用delete运算符来删除数组元素

    var a = [1,2,3];
    delete a[1];        //a在索引1的位置不再有元素
    1 in a              //false
    a.length            //3

    可以看出,delete不会修改数组的length属性
    删除数组元素还可以使用数组的pop()方法和shift()方法。pop()方法一次删除数组末尾的最后一个元素,方法返回被删除的元素;shift()方法则是在数组首部删除元素,同样方法本身返回被删除的元素。与delete不同是,delete其他元素的索引位置不变,即形成稀疏数组,而pop()和shift()方法数组的相应元素索引自动减1.,即恢复稠密数组。
    最后,splice()是一个通用的方法来插入,删除和替换数组元素,该方法改变原数组,返回的是移除的元素。新数组仍然是稠密数组

  4. ES3数组方法
    4.1 join()
    将数组中所有元素都转换为字符串连接在一起,可以传入一个参数作为分隔符,如果没有参数则默认以逗号分隔。该方法并不改变原数组
    Array.join()方法是String.split()方法的逆向操作
    4.2 reverse()
    将数组中的元素颠倒顺序,改变原数组,方法返回新数组。
    4.3 sort()
    将数组中的元素排序。改变原数组,并返回新数组。若数组包含undefined元素,它们会排在数组尾部
    sort()排序方式是按字母表顺序排序的,若想按数值大小排序,可以传入一个比较函数
    4.4 concat()
    创建并返回一个新数组,不会改变原来的数组。
    var a = [1,2,3];
    a.concat(4,5);              //返回[1,2,3,4,5]
    a.concat([4,5]);            //返回[1,2,3,4,5]
    a.concat([4,5],[6,7]);      //返回[1,2,3,4,5,6,7]
    a.concat(4,[5.[6,7]]);      //返回[1,2,3,4,5,[6,7]]

    4.5 slice()
    返回指定数组的一个片段或子数组,两个参数分别为开始和结束位置,但不包含结束位置。不会改变原数组
    4.6 splice()
    该方法第一个参数指定起始位置,第二个参数为从数组中删除的个数,若省略则从起始一直删除到末尾,后面的其他参数是要插入的元素。改变原数组,返回被删除的元素组成的数组,若没有删除元素,则返回空数组。
    4.7 push()和pop()
    4.8 unshift()和shift()
    4.9 toString()和toLocaleString()

  5. ES5数组方法
    5.1 forEach()
    遍历数组,为每个数组调用指定的函数,传递的函数作为第一个参数,然后forEach()使用3个参数调用该函数:数组元素,元素的索引和数组本身
    5.2 map()
    将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该数组的返回值。
    5.3 filter()
    返回的数组元素师调用数组的一个子集。传递的函数是用来判定的,该函数返回true或false。
    5.4 every()和some()
    every()和some()方法是数组的·逻辑判定,它们对数组元素应用指定的函数进行判定,返回true或false
    5.5 reduce()和reduceRight()
    5.6 indexOf()和lastIndexOf()
    搜素整个数组中具有给定值的元素,返回找到的第一个元素的索引,若没有该元素返回-1。
  6. 数组类型
    我们可以使用typeof操作符来方便的识别基本类型数据,但却不能用来区分数组和非数组对象,因为他们都会返回“对象”,在ES5中,我们可以使用Array.instanceof操作符来完成这个工作,


    http://javascript.ruanyifeng.com/stdlib/array.html


2017-10-09
19:21:23

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!