数组是元素的一个有序组合。在JavaScript中,数组可以使用正式的对象表示法来创建,或者可以使用直接量表示法来初始化。
复制代码 代码如下:
var arrObject = new Array("val1", "val2"); // 作为对象的数组
var arrLiteral = ["val1", "val2"]; // 数组直接量
对于开发者来说,这没有区别:在直接量和对象上都可以调用一个Array方法。对于JavaScript引擎来说,每次访问数组直接量的时候,必须重新解释它,特别是在一个函数中使用它的时候。
使用new运算符来创建一个新的Array对象:
复制代码 代码如下:
var arrObject = new Array();
也可以创建带有某些值的一个新数组:
复制代码 代码如下:
var arrObject = new Array("val1", "val2");
JavaScript中的数组是从0开始索引的,这意味着,第一个元素的索引是0,最后一个元素是数组的长度减去1。
1、循环遍历数组
问题:想要很容易地访问数组的所有元素。
解决方案:
要访问一个数组,最常用的方法是使用for循环:
复制代码 代码如下:
<script type="text/javascript">
var animals = new Array("cat", "dog", "whale", "seal");
var animalString = "";
for (var i = 0; i < animals.length - 1; i++) {
animalString += animals[i] + " ";
}
alert(animalString);
</script>
讨论:
for循环可以用来访问数组的每一个元素。数组从0开始,而且数组属性length用来设定循环结束。
2、按顺序存储和访问值
问题:想要以这样一种方式来存储值,可以按照存储它们的方式来顺序访问值;
解决方案:
要按照接受值的顺序来存储和访问值,创建一个先进先出(FIFO)的队列。使用JavaScript Array对象的push方法,向队列添加项,并且用shift来获取项:
复制代码 代码如下:
<script type="text/javascript">
// 创建新的数组
var queue = new Array();
// 压入3个条目
queue.push("first");
queue.push("second");
queue.push("third");
// 获取两个条目
alert(queue.shift());
alert(queue.shift());
alert(queue);
</script>
讨论:
Array push方法创建一个新的数组元素,并且将其添加到数组的末尾:
复制代码 代码如下:
queue.push("first");
每次压入一个元素,数组元素的计数自增。
Array shift方法从数组前面提取数组元素,将其从数组中删除,并且返回该元素:
复制代码 代码如下:
var elem = queue.shift();
对于每一个shift操作的元素,数组元素会自减,因为shift除了返回该项,还会修改数组。
3、以相反的顺序存储和访问值
问题:想要以一种方式来存储值,即以相反的顺序访问值,先访问最近存储的值,也就是一个后进先出(LIFO)的栈。
解决方案:
要以相反的顺序存储值,创建一个LIFO栈。使用JavaScript Array对象的push方法来想栈添加项,使用pop方法来获取项:
复制代码 代码如下:
<script type="text/javascript">
// 创建新的数组
var stack = new Array();
// 压入3个条目
stack.push("first");
stack.push("second");
stack.push("third");
// 弹出两个条目
alert(stack.pop()); // 返回第三个条目
alert(stack.pop()); // 返回第二个条目
alert(stack); // 返回第一个条目
</script>
讨论:
栈也是一个数组,其中每个新添加的元素位于栈的顶部,并且按照后进先出的顺序获取。
Array push方法创建一个新的元素,并将其添加到数组的尾部:
复制代码 代码如下:
stack.push("first");
每次压入元素的时候,数组元素的计数都会自增。
Array pop方法从数组的尾部提取数组元素,将其从数组中移走,并返回元素:
复制代码 代码如下:
var elem = stack.pop();
每次弹出一个元素的时候,数组元素计数会自减,因为弹出也修改了数组。
4、在数组中搜索
问题:想要在数组中搜索一个特定值,如果找到的话,获取该数组元素的索引。
解决方案:
使用新的(ECMAScript 5)Array对象方法indeOf和lastIndexOf:
复制代码 代码如下: