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] + '');
}
}