下一题的内容是JavaScript数组,比赛双方需要说出自己对于数组的理解,最后由掌尊林元青判断谁可以胜出。听到这个题目,叶小凡差点笑出了声,关于数组,他自己都不知道已经和叶老那个老怪“交流”多少回了。虽然不知道自己对于数组的掌握有多深,但是叶小凡依然有着十足的信心。于是,就在对手还在冥思苦想的时候,叶小凡已经滔滔不绝地讲述了起来。
“在JavaScript中,数组是一个非常灵活的类型。 简单来说,数组就是一个容器,可以存放一个或者多个对象 。当然, 这些对象的类型是没有限制的 ,不管它是什么,数组都可以存放。”叶小凡非常淡定地说道,中间没有丝毫停顿,好像这些话早已融入他的灵魂深处一样。
“呵!说得好像你很懂似的,姓叶的,你倒是先说说数组该怎么创建吧!”对面的弟子不屑一顾地说道。对于数组,他虽然不敢说非常精通,但是多少有点了解。更关键的是,他自己可是比叶小凡早入门许久,当然不认为自己会比叶小凡这个新人差,他已经准备好了,计划随时打断叶小凡的讲述。
“数组有4种定义方式。”叶小凡随即讲道。
“什么,4种?笑死人了,我倒还是第一次听说,数组不就是用一对中括号就可以定义了吗,哪来的4种?”对面的弟子不屑地笑了笑。
“你说的是用直接量定义数组。”叶小凡继续说道,“ 所谓直接量定义,就是用一对中括号声明一个数组对象 ,就像这样。”
var arr = ["first", "second", "third"]; console.log(arr);
“得到的结果就是生成了一个拥有3个元素的数组对象,对象的名字是arr。这种方法的好处是在定义数组的时候可以直接对这个数组进行初始化。除了这种方法,还有其他三种方法,我先来说第二种。”说着,叶小凡就打出了一句代码。
var a = new Array();
“这是采用构造函数的方式创建的一个数组对象, 在JavaScript中,每个类型其实都有一个函数作为支撑 ,数组也不例外。在这个例子中,Array也叫作构造函数。与第二种方法类似,还有两种方法也是采用构造函数创建一个数组对象的。”
var b = new Array(8); var c = new Array("first", "second", "third");
“这三种方式有着各自的特点,第一种是直接用构造函数创建一个空的数组,也就是说,这个数组里面什么都没有。数组天生就拥有一个length属性,我可以让这个a变量调用自身的length属性以验证这一点。”
var a = new Array(); console.log(a.length);
代码运行后,众人看得清清楚楚,结果是一个“0”。
“相信各位也看到了,这段代码的结果是一个0,表示当前的数组对象里面啥也没有。接下来看第二种方式。”
var b = new Array(8);
“这种方式和刚才那种方式的不同点就在于,它虽然也是创建一个数组,但是却在创建的同时设置了一个初始的长度,大家看,Array是一个函数,new关键字表示创建这个函数所表示的对象,因为是函数,所以自然是可以打括号的。 没错,函数可以打括号,打括号的意思是执行这个函数的函数体 。函数是有参数的,这个‘8’就是参数。在这个例子中,‘8’表示给数组对象添加一个初始化的长度,我依然可以用数组的length属性验证这一点。”说着,叶小凡继续打出代码。
var b = new Array(8); console.log(b.length);
代码运行后,众人看得清清楚楚,结果是一个“8”。
“相信各位也看到了,这段代码的结果是‘8’,表示当前的数组对象里面已经有8个元素了。那么问题来了,我并没有给这个数组添加任何东西,最起码看起来没有。那么,这8个元素到底是什么呢?这个待会再说,先看最后一种方式。”
var c = new Array("first", "second", "third");
“这种方式在创建数组对象的同时就给它赋予了初值。简单来说,就是在创建数组的时候给它添加了3个元素。正因为如此,这个数组当前的length属性已经有值了,而且就是其里面元素的个数——3。”
var c = new Array("first", "second", "third"); console.log(c.length);
代码运行后,众人看得清清楚楚,结果是一个“3”。
“什么,叶小凡,你竟然连函数都知道了!”对面的弟子瞪大了眼睛,一脸的难以置信,要知道,在JavaScript初级阶段,函数可是一门了不起的法术!虽然也有一些悟性好的弟子提前对函数有了一知半解,但是大部分初级弟子都是无法驾驭函数的。
“还是继续讲讲数组吧,刚才我说了创建数组的4种方式,第一种是用直接量创建数组,剩下的3种都是用构造函数创建数组。其实用起来的话,还是第一种方式最好用,它是最简单的一种方式。”
“嗯,说得好,关于数组的创建,叶小凡说得算是比较通透了。”林元青也满意地点了点头,场外的弟子又是一阵喧嚣。
“刚才你还说到数组的length属性,那是什么?”对面的弟子收起了对叶小凡的轻视,皱着眉头问道。
“哦,你说的是length属性,数组只有一个属性,就是length。length表示数组所占内存空间的数目,而不仅仅是数组中元素的个数。比如,我可以定义一个长度为8的数组,但其里面却只有一个元素,就好像下面的代码。”
var b = new Array(8);
“变量b指向一个数组,这个数组所占的内存空间为8个单位,也就是说,有8个位置可以让这个数组存放其他元素。虽然我现在还没有给这个数组添加任何元素,但是并不代表这个数组没有长度,而这个长度就是数组的length属性。”
“那这个数组内部到底有什么?”
“这个数组的内部就是8个空元素,没有东西,但是占据了内存空间。”说着,叶小凡打出一段代码进行验证。
var b = new Array(8); console.log(b);
代码运行后,众人看得清清楚楚,结果是[<8 empty items> ]。
“原来如此。”对面的弟子也佩服起叶小凡来。
“数组作为一个对象,有着很多内置的方法,接下来就说说那些有趣的方法吧。”