JavaScript数组简介

来源:互联网 发布:语音相似度匹配算法 编辑:程序博客网 时间:2024/05/17 21:51

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

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

var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组var names = [];alert(colors.length);            //3alert(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

在此,虽然 colors 数组包含 3 个项,但把它的 length 属性设置成了 4。这个数组不存在位置 3, 所以访问这个位置的值就得到了特殊值 undefined。
利用 length 属性也可以方便地在数组末尾添加新项,如下所示:

var colors = ["red", "blue", "green"];colors[colors.length] = "black";colors[colors.length] = "brown";// 创建一个包含 3 个字符串的数组 //(在位置3)添加一种颜色 //(在位置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。

注意:数组最多可以包含 4 294 967 295 个项,这几乎已经能够满足任何编程需求了。如 果想添加的项数超过这个上限值,就会发生异常。而创建一个初始大小与这个上限值 接近的数组,则可能会导致运行时间超长的脚本错误。

整理自《JavaScript高级程序设计》

0 0
原创粉丝点击