跳到主要内容

使用数组

存储数组元素

  • 在 JavaScript 中长度是弹性的
  • 数值下标 0 开头
  • 数组下标必须大于 0 ,且不超过 2^32-1 的值
  • 数组元素可以添加到对象中,方便非法的标识符读取属性值

数组长度 length 是动态值

let a = [];
a[2] = 1;
a[100] = 2;
for (let i in a) {
alert(a[i]);
}

对象和数组

  • 对象是包含已命名的值的集合类型;数组是一种包含已编码值的集合类型
  • 调用标志符是本身,对象调用使用 '.' 或 '[]' ;数组则使用 '[]'
  • 用 '.' 读取对象属性时,是采用标识符,而 '[]' 是采用字符串,所以可以动态生成

使用点运算符存取属性时,属性名是标识符;而使用中括号运算符存取属性时,属性名是字符串。

关联数组是一种数据结构,它允许用户动态的将任意值和任意字符串关联起来。实际上, JavaScript 对象就是使用关联数组实现的。这样有助于在设计中将对象和数组作为单独的类型来处理。

如果数组的下值太大、为负数、浮点数、布尔值、对象、其它值, Javascript 会自动将其转化成字符串,从而生成与字符串相关的关联数组,即对象属性的名字,而不再是数组的下标。

数据集合e说明
数组Array固定大小的有序集合
数组列表ArrayList对象的动态数组类型
列表List可通过索引访问的对象的强类型列表
字典Dictionary表示键和值的集合
有序列表SortedList与哈希表类似
哈希表HashTable名/值对,类似字典,比数组更强大
Stack后进先出栈集合
列队Queue先进先出栈集合

哈希表

伪数组(关联数组),类似于其它语言的非数字索引数组。

var a = [];
a['张三'] = 1;
a['李四'] = 2;
a['王五'] = 3;
alert(a['李四']);

定义多维数组

JavaScript 不支持多维数组,但是多维数组在实际开发中非常有用,所以可以套娃。

数组的长度

在 Javascript 中,数组的长度是灵活的,不需要考虑数组的元素是否超出,或者下标是否保持连续。

数组下标

数组下标必须是大于 0 的整数,当然,也可以是任何类型数据。

var a = [];
a[true] = 1;
a[false] = 0;
a[-1] = 2;
alert(a.length); // 0 ,说明数组长度并没有增加
alert(a[true]); // 1
alert(a[false]); // 0
alert(a[1]); // undefined
alert(a[0]); // undefined
alert(a[-1]); // 2
alert(a['-1']); // 2

虽然 JavaScript 可以将 true 和 false 转化为 1 和 0,但是将其当作对象来处理。

var a = [];
a[(0, 0)] = 1;
a[(0, 1)] = 2;
a[(1, 0)] = 3;
a[(1, 1)] = 4;
console.log(a.length + ''); // 2
console.log(a[0] + ''); // 3
console.log(a[1]); // 4

上述写法不会报错,但是前两行代码会被后两行覆盖掉。数组的值以下标计算后为准。

多维数组

JavaScript 中,虽然不可以直接声明多维数组,但是可以将数组实现为嵌套数组,其实质上是数组的数组。嵌套数组也可以视作多维数组,可以看作是矩阵或网格。

例如下面的代码就实现了一个多维数组:

var twoDArray = new Array(new Array("one", "two"),
new Array("three", "four");
console.log(twoDArray); // 输出 one,two,three,four

数组 twoDArray 包含2个元素,每个元素都是一个包含两个元素的数组, twoDArray 是包含2个嵌套数组的主数组,从而可以看作是一个两行两列的二维数组。

要检索多维数组的元素,可以在顶层数组的名称之后使用多个数组访问运算符([])。第一个"[]"指向顶层数组的索引,随后的数组访问运算符指向嵌套数组的元素。例如,可以使用下面的方法访问前面定义的二维数组:

console.log(twoDArray[0][0]); // 输出 one
console.log(twoDArray[1][1]); // 输出 four

也可以使用循环语句遍历多维数组,例如下面的程序代码:

// 这里用到了 Array 类的属性 length
var twoDArray = new Array(new Array('one', 'two'), new Array('three', 'four'));
var outerArrayLength = twoDArray.length; // 主数组的长度
// 嵌套数组的长度
var innerArrayLength = twoDArray[i].length;
for (var i = 0; i < outerArrayLength; i++) {
for (var j = 0; j < innerArrayLength; j++) {
console.log(twoDArray[i][j] + '');
}
}