33.数组声明方式(var构造函数) 、检测数组类型、数组的属性(封装好的就一个length)、数组的方法

数组:一组数据的有序集合

创建方式:var声明   构造函数

界定符:【】,里面的变量用  , 隔开

数组与对象不同:

                  一:var 声明方式创建数组

                           1.数组是有序集合对象

                       2.数组用下标取值必须用【】从0开始计数,取属性值可以用.

                          数组里可以存放任意的数据类型,只要合法

                                                                  

                    3.兼容性问题:关于 逗号的问题,最后一项后面不要加 逗号, 因为在IE8以下,加 逗号会默认最后一项为undefined,因此数组长度会加一

                      

             二:使用new Array()构造函数来创建数组,(通常不用构造函数来创建数组)

                   参数:1.空  2.数字  3.字符串

                 ①:   Array,如果创建的时候不需要传递参数,可以省略()

                     

                 ②:Array,如果1.传的参数是数字,数字决定数组的长度,会用empty来填补空位

                            

                                        2.传的参数不是数字,就是数组项  

                           

                            

                           

二:检测数组类型

                            

                          只要是对象,就是引用数据类型,操作的就是内存地址。

                             把arr的内存地址赋值给b,此时b与arr都可以操作【1,2,3】,且互相影响,

               

三:数组的属性:

         1.length  

                          

                         ① 获取不存在的下标:undefined

                         

                         ② 给超过长度的下标赋值,js会自动用empty填充增加长度,直到给相应的下标赋值

                         

                        ③可以自定义数组长度:

                                 自定义长度>创建时的长度,数组会自动用empty填充

                       

                                自定义数组长度<创建长度,数组会自动把长度之外的数组项删去。

                      

                        可以用:1.下标取值    2.for in 遍历    3. for 循环       

                             1.下标取值      

                          

                            2.for  in遍历

                         数组是对象,可以用 for in 遍历对象属性的方法来遍历, 下标相当于属性名

                         

                            3.for 循环

                         

四:数组的方法

       关心点  1):是否改变原数组

                  2):返回值是什么

           ①:数组的头尾操作 四个方法:(push(n1,n2) 、pop()、unshift(n1,n2)shift()

                    push(添加尾部值1,2) 尾部插入数值,改变原数组,返回值是数组长度

                  1.push:  

                        调用数组对象调用push,改变原数组值,将数组长度返回给index

                    2.pop()方法:删除数组尾部项,返回值为删除的数组项 :

       

                     3.unshift(n1,n2),在数组头部添加,返回数组长度

                 

                  

                      4.shift(),删除数组头部,返回被删除值

                 

               ②数组的合并:

                                  concat()             a.concat(b) /a.concat(b,c)       不会改变原数组,会返回新数组。

                                                             可以与多个数组合并,可以放数组变量,可以放数组字面量,也可以放数组散列值(数组项)

     

            

      

            ③:数组的截取 slice(开始位置,结束位置)    [)左闭右开区间,不会改变原数组,返回新数组

            

                                如果不给结束位置,就会截取到最后:

     

                     slice(0):起始位置写0,不给结束位置,会将数组复制一份,但不会复制数组的内存地址,因此arr改变并不会影响arr2,

小技巧:数组调用slice(0)方法可以达到复制数组的目的。

   

         

         

                      slice(),括号里放负数

               eg1:放负二    length 为 7  7+(-2)=5 ,相当于slice(5),从字面意义上更好理解:打印最后两个。但要知道是从下标5开始的。用length+负数

                用户传入负值,底层会把它转为正值的形式。如slice(-2) ,在底层转为slice(5),但做题或者理解上,知道是最后两个更好理解。

    

               eg2:如果 负数绝对值大于length,相当于slice(0)

           

               slice 遵循左闭右开

        

      

        总结slice:1.正值取法,左边的值小于右边

                       2.负值取法,左边的值小于右边,(但左边的绝对值大于右边),负值取法,也是从左向右截取,只不过从后面开始。

                 注意:如果左边的值不小于右边,值为空数组

   

              ④:splice:数组的多功能方法:可以替换、插入、截取/删除,可以改变数组的长度

                                splice是左闭右闭区间      (slice是左闭右开区间)

                    第一个参数:开始替换的位置

                    第二个参数:替换几项

                    第三个参数及以后的参数:替换的内容

             1):替换(可能会改变数组长度)

               splice 不给替换项就是删除功能,删除后不会用替换项来替换,因此,数组中原数组项的下标位置会发生变化。

               

                

               用dongxie替换了三项,改变了数组的长度

             

           splice 返回被替换的项组成的数组

             2)删除:不给替换项,就删除

    

        splice 返回被删除的项组成的数组

             3)插入:替换项数为0,就插入

          

          插入,没有被替换、被删除的项,因此返回空数组

          ⑤:

   数组排序:

    1):reverse:会改变原数组,返回的是倒序数组,该数组与原数组索引一致。改变原数组对象,新的也跟着改。

    

       返回倒序的数组索引(索引就是内存地址)

          因为返回的是数组索引,所以改变原数组arr,index倒序数组也跟着该变(slice(0)复制的数组,而非索引,因此slice(0)返回的是新数组,改变原数组,复制的数组不会跟着改变,注意区别)

            2.sort():会改变原数组,从小到大排序(字符编码),返回的是数组索引,改变原数组,新数组跟着改。

                 由小到大比较的是字符编码,都是数字的话看首字符,eg:13   5      1<5,因此sort(),之后 13 < 5

                 可以有三种排序: 由小到大  由大到小 随机排序  //借助回调函数

          

         

      1、11、12同级 11与 3   因为1<3,故在前面

          鉴于:sort()是按字符编码来有小到大排序,可能出现 13 < 2 的情况,所以使用向sort里添加回调函数的做法

          

          优化:  sort(function(a,b){

           return a-b;})   //意思为 如果a>b,返回正值,按由小到大来排序,a在后,b在前,以此类推,会遍历数组每一项,直到彻底的有小到大排列完成

      sort(function(a,b){return b-a;})//由大到小排序

          sort(function(){return Math.random()-0.5})//随机排序,不用写参数

               

                       由大到小排序

                       随机排序,不用写参数。   Math.random() 返回0-1之间的随机数

           ⑥:join():数组转成字符串:不改变数组,返回数组项和连接符拼接的字符串

      括号内不传参数,是,连接数组各项

                      括号内要么不传参数,要么传字符串,来作为连接数组各项之间的连接符。

     

      join(""):  传空字符串,可以去掉数组各项之间的,组成字符串

    

           

          toString()也能转,只是不能传参数,用,连接

 

            ⑦:数组的查询:indexOf 、 lastIndexOf

   indexOf 返回的是第一次查到的下标,从头开始查找,如果查询不到返回-1 ,

   lastIndexOf:从后往前查找 

         如果indexOf lastIndexOf 给定第二个参数。第二个参数:开始查找的起始位置 

    

   

         lastIndexOf:从后往前查找

    

        从4这个下标开始向后查找

   

    从四这个下标向前查找

  

        ⑧:Array.isArray() 判断是不是数组

  

 

 

 

   

   

 

 

  

       

    

 

        

 


 

    

                     

  

                 

            

         

            

                 

         

               

 

     

                              

                                    

                          

 

                                       

                         

             

                            

               

                    

 

                        

原文地址:https://www.cnblogs.com/yzdwd/p/12536652.html