2.8 数组
上一小节中使用的简单变量只是保存了一段信息,例如一个数字或一个字符串值。当你只需要记录分数、年龄或总价这样的单个内容的时候,它们做得很好。然而,如果需要存储一组相关的项目,例如,一个星期中的所有的星期几名称,或者Web页面上所有图像的一个列表,此时简单的变量并不是很方便使用。
例如,假设已经创建了一个JavaScript购物车系统,它记录了访问者想要购买的商品,如果想要使用简单的变量来记录访问者添加到购物车中的所有商品,必须像下面这样编写代码:
var item1='Xbox 360’;
var item2='Tennis shoes';
var item3='Gift certificate';
但是,如果想要添加更多的商品,该怎么办呢?必须创建更多的变量,item4、item5等。并且,由于不知道访问者想要购买多少商品,我们确实不知道应该创建多少变量。
好在JavaScript为记录项目列表提供了一种更好的方法——数组。数组是在单个地方存储多个值的一种方式。把数组当成是一个购物列表。当需要去杂货店的时候,我们坐下来并写下要购买的商品的列表。如果此前几天刚刚去过杂货店购物,这个列表可能只包含一些商品,但是,如果储存的食品已经很少了,这个购物列表可能相当长。不管列表中有多少商品,它还都只是一个列表。
不使用数组的话,我们必须为列表中的每个商品创建一个变量。例如,想象一下,我们无法在单独的一张纸上记录下商品列表,而是必须使用一叠纸片,每张纸片用于记录要购买的一项商品。如果想要添加其他需要购买的商品,就需要一张新的纸片,然后,在购物的时候按照每个纸片去进行(如图2-5所示)。这就是简单变量的工作方式。但是,通过使用数组,我们可以创建商品的一个单独的列表,并且甚至可以随时添加、删除或修改商品。
2.8.1 创建数组
要创建数组并在数组中存储项目,首先声明数组的名称(就像我们对一个变量所做的一样),然后提供逗号分隔的值的一个列表:每个值表示列表中的一个项目。和变量一样,数组的名称也取决于我们自己,但是需要遵守2.4.1节列出的命名规则。要表示一个数组,可以把项目列表放在开始方括号和结束方括号之间:
图 2-5 数组提供了一种简单的、有组织的方式来记录相关商品的列表。向列表中添加其他商品就像在列表的下端写入一个新的商品
var days=['Mon','Tues','Wed','Thurs','Fri','Sat','Sun'];
方括号[]非常重要,它们告诉JavaScript解释器将要处理一个数组。我们可以创建一个空的没有任何元素的数组:
var playList=[];
创建一个空的数组,等同于2.4.1小节所介绍的声明一个变量。当在程序运行时才向数组添加项目的情况下,我们将创建一个空的数组。例如,上面的数组可能用来记录某人从Web页面上的一个列表中选择的歌曲,此前我们不知道他将要选择哪些歌曲,因此声明了一个空的数组并且随后用他选择的歌曲来填充项目(向数组添加项目将在2.8.3节介绍)。
注意:在浏览其他人的JavaScript程序(或其他的JavaScript图书)的时候,我们可能会遇到另一种创建数组的方式,即使用Array关键字,如下所示:
var days=new Array('Mon','Tues','Wed');
这种方法也是有效的,但是,本书中使用的方法(叫做数组直接量)需要更少的录入和更短的代码。
可以把值的任何混合形式存储到一个数组中。换句话说,数值、字符串和Boolean值都可以出现在同一个数组中:
var prefs=[1,223,'www.oreilly.com',false];
注意:我们甚至可以把数组和其他对象作为元素存储到数组中。这有助于存储复杂的数据。
上面这个数组的例子展示了在单独一行代码内创建数组。然而,如果我们已经有了很多要添加的项目,或者项目是较长的字符串,那么,试图在一行代码中输入所有内容会使得程序难以阅读。在这种情况下,很多程序员选择另一种方法,即通过数行代码创建一个数组,如下所示:
var authors=['Ernest Hemingway',
'Charlotte Bronte',
'Dante Alighieri',
'Emily Dickinson'
];
正如2.4.2节中的“常见问题:JavaScript中的空格、制表符和回车”部分所介绍的,JavaScript解释器会忽略额外的空格和分行符号,因此,即便这段代码分5行显示,它仍然是一条语句,最后一行的分号表明了这一点。
提示:要让名字像上面那样排列,可以输入第一行var authors=['Ernest Hemingway',按下回车键,然后多次按下空格键直到换到新行,输入下一个值'Charlotte Bronte',。