JavaScript百炼成仙|JavaScript百炼成仙 1.15 天秀

下一题的内容是JavaScript数组,比赛双方需要说出自己对于数组的理解,最后由掌尊林元青来判断谁可以胜出。听到这个题目,叶小凡差点笑出声了,关于数组,自己都不知道和叶老那个老怪“交流”多少回了。虽然不知道自己对于数组的掌握有多深,但是叶小凡依然有着十足的信心。于是,就在对面还在冥思苦想的时候,叶小凡已经滔滔不绝地讲述了起来。
“在JavaScript中,数组是一个非常灵活的类型。简单来说,数组就是一个容器,可以存放一个或者多个对象。当然了,这些对象的类型是没有限制的,不管它是什么,数组都可以存放。”叶小凡非常淡定地说道,中间没有丝毫停顿,好像这些话早已经融入自己的灵魂深处一样。
“喝!说得好像你很懂似的,姓叶的,你倒是先说说,数组该怎么创建吧!”对面弟子不屑一顾地说道,对于数组,他虽然不敢说非常精通,但是多少有点了解。更关键的是,自己可是比叶小凡早入门许久,当然不认为自己会比叶小凡这个新人差。他已经准备好了,计划随时打断叶小凡的讲述。
“数组有四种定义方式。”叶小凡随机讲到。
“什么,四种?笑死人了,我倒还是第一次听说,数组不就是一对中括号就定义了吗,哪来的四种?”对面弟子不屑一顾地笑了笑。
“你说的是用直接量定义数组。”叶小凡继续说道,“所谓直接量定义,就是用一对中括号来声明一个数组对象,就像这样:”

var arr = ["first", "second", "third"]; console.log(arr);

“得到的结果,就是生成了一个拥有三个元素的数组对象,对象的名字是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个元素了。那么问题来了,我并没有给这个数组添加任何东西,最起码,看起来没有。那么,这八个元素到底是什么呢?这个待会说,先看最后一种方式。”
var c = new Array("first", "second", "third");

“这一种方式在创建数组对象的同时,就给它赋予了初值。简单来说,就是创建数组的时候,就给它添加了三个元素。正因为如此,所以这个数组当前的length属性已经有值了,而且就是里面元素的个数:3!”
var c = new Array("first", "second", "third"); console.log(c.length);

代码运行,众人看得清清楚楚,结果是一个“3”。
【JavaScript百炼成仙|JavaScript百炼成仙 1.15 天秀】“什么,叶小凡,你…竟然连函数都知道了!”对面弟子瞪大了眼睛,一脸的难以置信,要知道,在JavaScript初级阶段,函数可是一门了不起的法术了!虽然也有一些悟性好的弟子提前对函数有了一知半解,但是大部分初级弟子都是无法驾驭函数的。
“还是继续讲讲数组吧,刚才我一共说了创建数组的四种方式,第一种是用直接量来创建数组,剩下三种都是用构造函数来创建数组。怎么说呢,其实用起来的话,还是第一种方法最好用了,也是最简单的一种方式。”
“嗯,说得好,关于数组的创建,叶小凡说得算是比较通透了。”林元青也满意得点了点头。场外弟子又是一阵喧嚣。
“刚才你还说到数组的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> ]。
“原来如此。”对面弟子也佩服起叶小凡来。
“数组作为一个对象,就有着很多内置的方法,接下来就说说那些有趣的方法吧。”

    推荐阅读