美文网首页
浅谈JS数组以及Array构造函数

浅谈JS数组以及Array构造函数

作者: 印第安老斑鸠_333 | 来源:发表于2019-03-02 20:42 被阅读0次

    一.关于数组

        1.什么是数组

            ①,数组的数据类型是Object,也就是说数组是对象。

            ②,数组是按照顺序排列的一组值,这也是区别于普通对象的一种特征。

            ③,数组是Array构造函数的实例,原型指向Array.prototype,并继承其属性和方法。普通对象则继承Object.prorotype的属性和方法,这也是区别于普通对象的一种特征。

            ④,var arr = [1,'2',{},function(){},null,true,[ ] ];arr就是数组,[ ]这两个方括号就是数组的特征。里面的成员可以是任意数据类型。

            ⑤,数组的成员不需要写下标,因为下标是固定的,0代表第一个1代表第二个......

        2.数组成员以及length属性

            ①,数组里面的每个成员,都有按次序排列的下标,也就是键值,从0开始到4294967294(2的32次方减2)结束。

            ②,length属性的值,初始由数组成员数量决定,最多4294967295(2的32次方减1)个。因为数组成员的下标从0开始,所以length的值为数组中存在的最大下标加1。      

                ⑴.length属性可写,如果写入的值大于实际数组成员数量,那么成员数量就等于你写入的值但多出的全部是空位,空位就是位置上啥都没有[,,,,,,]。

                ⑵.写入的length属性小于实际数组成员,成员数量还是等于你写入的值,多出的全部删除,如果length=0,则清空所有成员,这是一个清空数组的办法。

            ③,读取数组成员的方法就是arr[key],key为下标,下标就是成员所在的位置。

                ⑴.可动态添加或覆盖数组成员,直接赋值即可,arr[key] = value

                ⑵.delete命令可删除一个成员,删除以后该位置为空位,空位就是该位置啥都没有,但是这个位置还存在,所以不影响length的值,也不影响其他成员的位置。

            ④,可以不按照数组方式添加成员,比如arr.name = '张三',但这并不会影响其他成员,也不会影响length的值,也就是说不会影响length所表示的成员数量以及其他成员的下标。

    3.遍历数组

       ①,in运算符

            ⑴,和对象一样,可以查看一个成员是否存在于数组当中,使用方法:key in arr,如果存在返回true,不存在返回false。空位返回false。

        ②,for.....in......

            ⑴,用来遍历数组,但需注意,除了不可遍历属性以及空位不被遍历以外,非数字键也会被遍历,继承属性也会被遍历。

        ③,for循环和while循环遍历可以遍历空位。

            ⑴,  声明一个数组arr = [1,2,3,4,5,,];。

                     for (var index=0;index<arr.length;index++){

                            console.log(arr[index])

                        }//1,2,3,4,5,undefined

        4.关于空位

            ①,[,,,,,,,]这是空位。   

            ②,写入的length的值大于当前数组成员数量,多出来的也是空位。

            ③,delete删除的成员也是空位。

            ④,读取空位的值为undefined,比如读取[,,]里面的空位以及上面②③的操作,但是注意,这和[undefined,undefined]是完全不一样的,因为undefined是实实在在的存在的值。

            ⑤,空位([,,])就是空占位置,没有任何东西,虽然他返回undefined。就比如一个已经被声明,但没被赋值的变量一样,比如var a。

            ⑥,[undefined]是有东西的,一目了然,值也是undefined。这个变量是这么声明的:var a = undefined。

    二.关于Array构造函数

    1.Array是什么

            ①,它是一个函数,函数属于Object类型,所以它也是一个对象。

            ②,它是JS内置的原生对象。是Function的实例。原型对象指向Function.prototype.

            ③,数组是Array的实例。数组的原型对象指向Array.prototype。所以继承了后者的属性和方法。

    2.Array怎么用

            ①,var arr = new Array();声明一个数组。

                ⑴,一个正整数参数,实例的数组length属性与之对应。

                ⑵,多个参数or一个非数字参数,实例的数组成员与之一一对应。

                ⑶,没有参数,实例的数组为空数组。

                ⑷,一个小数或负数为参数,报错。

    实例数组对象

            ②,new Array()与Array()作用是一样的。也就是说,①里介绍的用Array()完全可以实现。

    3.实例继承的方法

    ①,arr.pop() arr.push()

            ⑴,push()接受一个或多个参数,将其插入数组尾部,返回一个插入后的数组length属性。

            ⑵,pop()删除最末端成员,返回该成员属性值。

            ⑶,它俩构成先进后出,也就是stack,栈。

    ②,arr.shift() arr.unshift()

             ⑴,unshift()接受一个或多个参数,将其插入数组首部,返回一个插入后的数组length属性。

             ⑵,shifth()删除最前端成员,返回该成员属性值。

             ⑶,push()和shift()结合使用,就构成了“先进先出”的队列结构。

    ③,arr.join();

               ⑴, join()方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。

               ⑵,如果数组成员是undefined或null或空位,会被转成空字符串。

    ④,arr.concat()

              ⑴,接受多个参数,用于合并数组,如果参数是数组,则合并数组,如果是其他类型的值,则依次添加到原数组中,返回一个新数组。不会修改原数组

               ⑵,会在数组尾部添加合并项。

               ⑶,参数可为空,那就会返回一个和原数组一模一样的数组出来。

    ⑤,arr.reverse()

               ⑴,reverse方法用于颠倒排列数组元素,返回改变后的数组。注意,该方法将改变原数组

    ⑥,arr.slice()

                ⑴,该方法可以取出数组的一部分并返回一个新数组。

                ⑵,接受两个参数,第一个为起始位置(从零开始),第二个为终点位置(并不包含该位置),接受负数,负数代表倒着定位置。只有一个参数的话就从这个位置一直到终点。不些参数就提取全数组并返回,相当于拷贝了原数组。第二个参数代表的位置如果在第一个的前面,返回空数组。

    ⑦,arr.splice()

                 ⑴,splice方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。

                ⑵, splice的第一个参数是删除的起始位置(从0开始),第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素(在起始位置插入)。

                ⑶,起始位置如果是负数,就表示从倒数位置开始删除。

                ⑷,如果只是单纯地插入元素,splice方法的第二个参数可以设为0。

                ⑸,如果只提供第一个参数,等同于将原数组在指定位置拆分成两个数组。

        ⑧,arr.sort()

                给数组成员排序,默认按照unicode码点排序,如果成员不是字符转会先转为字符串。

                该方法接受一个函数作为参数,参数函数本身接受两个参数,比如a和b,a代表数组的第一个成员,b就代表第二个成员。从大到小排,就在参数函数的函数体内return b-a,反之return a-b。

        ⑧,arr.map()

                ⑴,map方法将数组的所有成员依次传入参数函数,有几个成员就执行几次,然后把每一次return出来的值按次序组和成数组返回。

                ⑵,map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。

                ⑶,map方法还可以接受第二个参数,用来绑定回调函数内部的this变量(详见《this 变量》一章)。

                 ⑷,如果数组有空位,map方法的回调函数在这个位置不会执行,会跳过数组的空位。

                 ⑸,map方法不会跳过undefined和null,但是会跳过空位。

        ⑨,arr.forEach()

                和map方法几乎一样,就是没有返回值。就是循环遍历数组,不会被break和container打断。

          ⑩,arr.filter()

                 ⑴,同样也是遍历数组,也是每存在一个成员就执行一次,也会返回一个数组,只不过不同在于它在每次执行的时候都要查看return出来的值所转换的布尔值,然后把每次return出转换布尔值为true的回合所对应的数组成员组合成新数组返回。

        ⑪,arr.reduce()

                ⑴,该方法牛逼去了,太强大了,他接受两个参数,第一个是函数,第二个是初始值(累计变量的初始值),这个初始值可以是任意数据类型。参数函数接受四个参数,分别是累计变量(默认数组第一个成员),当前变量(默认数组第二个成员),当前位置,原数组。

                 ⑵,每次执行结束,会把return的值赋值给累计变量,当遍历结束,返回累计变量的最后值。

        ⑫,arr.indexOf(),arr.lastIndexOf()

                ⑴,indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。

                ⑵,indexOf方法还可以接受第二个参数,表示搜索的开始位置。

                ⑶,lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。

                注意,这两个方法不能用来搜索NaN的位置,即它们无法确定数组成员是否包含NaN。这是因为这两个方法内部,使用严格相等运算符(===)进行比较,而NaN是唯一一个不等于自身的值。

                                                                                                            参考:阮一峰JS教程

    相关文章

      网友评论

          本文标题:浅谈JS数组以及Array构造函数

          本文链接:https://www.haomeiwen.com/subject/nivjuqtx.html