ECMAScript 5 —— Array 类型 (一)

除了 Object 之外,Array 类型恐怕是 ECMAScript 中最常用的类型了。虽然 ECMAScript 数组是数据的有序列表,但是ECMAScript 数组的每一项可以保存任何类型的数据。也就是说,可以用数组的第一个位置来保存字符串,用第二位置来保存数值,用第三个位置来保存对象,以此类推。另外,ECMAScript 数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。

一. 创建与使用

创建数组的基本方式有两种。第一种是使用 Array 构造函数,如下面的代码所示。

var colors = new Array(); 

如果预先知道数组要保存的项目数量,也可以给构造函数传递该数量,而该数量会自动变成 length属性的值。例如,下面的代码将创建 length 值为 20 的数组。

var colors = new Array(20); 

也可以向 Array 构造函数传递数组中应该包含的项。以下代码创建了一个包含 3 个字符串值的数组:

var colors = new Array("red", "blue", "green"); 

当然,给构造函数传递一个值也可以创建数组。但这时候问题就复杂一点了,因为如果传递的是数值,则会按照该数值创建包含给定项数的数组;而如果传递的是其他类型的参数,则会创建包含那个值的只有一项的数组。下面就两个例子:

var colors = new Array(3);          // 创建一个包含 3 项的数组 
var names = new Array("Greg");      // 创建一个包含 1 项,即字符串"Greg"的数组

另外,在使用 Array 构造函数时也可以省略 new 操作符。如下面的例子所示,省略 new 操作符的结果相同:

var colors = Array(3);          // 创建一个包含 3 项的数组 
var names = Array("Greg");      // 创建一个包含 1 项,即字符串"Greg"的数组

创建数组的第二种基本方式是使用数组字面量表示法。数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开,如下所示:

var colors = ["red", "blue", "green"];  // 创建一个包含 3 个字符串的数组
var names = [];                         // 创建一个空数组 

在读取和设置数组的值时,要使用方括号并提供相应值的基于 0 的数字索引,如下所示:

var colors = ["red", "blue", "green"];  // 定义一个字符串数组 
alert(colors[0]);                       // 显示第一项
colors[2] = "black";                    // 修改第三项
colors[3] = "brown";                    // 新增第四项

方括号中的索引表示要访问的值。如果索引小于数组中的项数,则返回对应项的值,就像这个例子中的 colors[0]会显示"red"一样。设置数组的值也使用相同的语法,但会替换指定位置的值。如果设置某个值的索引超过了数组现有项数,如这个例子中的 colors[3]所示,数组就会自动增加到该索引值加 1 的长度(就这个例子而言,索引是 3,因此数组长度就是 4)。

数组的项数保存在其 length 属性中,这个属性始终会返回 0 或更大的值,如下面这个例子所示:

var colors = ["red", "blue", "green"];      // 创建一个包含 3 个字符串的数组 
var names = [];                             // 创建一个空数组 
alert(colors.length);                       //3
alert(names.length);                       //0        

数组的 length 属性很有特点——它不是只读的。因此,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。看下面的例子:

var colors = ["red", "blue", "green"];      // 创建一个包含 3 个字符串的数组
colors.length = 2;
alert(colors[2]);                           //undefined

这个例子中的数组 colors 一开始有 3 个值。将其 length 属性设置为 2 会移除最后一项(位置为2 的那一项),结果再访问 colors[2]就会显示 undefined 了。如果将其 length 属性设置为大于数组项数的值,则新增的每一项都会取得 undefined 值,如下所示:

var colors = ["red", "blue", "green"];      // 创建一个包含 3 个字符串的数组
colors.length = 4;
alert(colors[3]);                           //undefined

利用 length 属性也可以方便地在数组末尾添加新项,如下所示:

var colors = ["red", "blue", "green"];      // 创建一个包含 3 个字符串的数组 
colors[colors.length] = "black";            //(在位置 3)添加一种颜色 
colors[colors.length] = "brown";            //(在位置 4)再添加一种颜色

由于数组最后一项的索引始终是 length-1,因此下一个新项的位置就是 length。每当在数组末尾添加一项后,其 length 属性都会自动更新以反应这一变化。换句话说,上面例子第二行中的colors[colors.length]为位置 3 添加了一个值,最后一行的 colors[colors.length]则为位置 4添加了一个值。当把一个值放在超出当前数组大小的位置上时,数组就会重新计算其长度值,即长度值等于最后一项的索引加 1,如下面的例子所示:

var colors = ["red", "blue", "green"];      // 创建一个包含 3 个字符串的数组 
colors[99] = "black";                       //(在位置 99)添加一种颜色 
alert(colors.length);                       // 100 

在这个例子中,我们向 colors 数组的位置 99 插入了一个值,结果数组新长度(length)就是 100 (99+1)。而位置 3 到位置 98 实际上都是不存在的,所以访问它们都将返回 undefined。

好了,本篇文章就介绍到这儿,欢迎大家留言交流;喜欢或有帮助到您的话,点个赞或推荐支持一下!

猜你喜欢

转载自www.cnblogs.com/johnvwan/p/9547080.html