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

一.关于数组

    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教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350