2 数组
2.1 什么是数组
-
数组是值的有序集合。
-
每个值叫做一个元素。
-
每个元素在数组中有一个位置, 以数字表示,称为索引 (有时也称为下标)。
-
数组的元素可以是任何类型。
-
数组索引从 0 开始, 最大为 2^32-2,数组最大能容纳 4294967294 个元素。
2.2 声明数组的方式
① 直接量方式
[]; // 空的数组
[100, 200, 300, '小乐', true, null, undefined, ['aa', 'bb']]; // 有 8 个元素的数组
[10]; // 只有一个元素的数组
② Array 函数方式
Array(100, 200, 300, '小乐', true, null, undefined, ['aa', 'bb']); // 创建有 8 个元素的数组
Array('hello'); // 创建有1个元素的数组
Array(15); // 创建有15个元素的数组
Array(); // 创建空数组
注意: Array 如果只有一个参数且该参数是number类型,会被认为是指定数组的长度。
③ Array 构造函数方式
new Array(100, 200, 300, '小乐', true, null, undefined, ['aa', 'bb']); // 创建有 8 个元素的数组
new Array('hello'); // 创建有1个元素的数组
new Array(15); // 创建有15个元素的数组
new Array(); // 创建空数组
总结: Array 构造函数方式和 Array 函数方式,规则都是一样的。
2.3 数组元素的读写
1. 数组名后面加 [], [] 里面写数组中某个元素的索引,可以对该与元素使用或赋值
arr[2] + 10;
console.log(arr[3]);
arr[3] = 2000;
2. 给不存在的元素赋值,会自动添加一个元素
3. 使用数组中不存在的元素,会返回 undefined
2.4 稀疏数组
1. 数组要求元素的索引必须是连续的数字
2. 如有数组中存在没有元素的值,这样的数组成为稀疏数组。
3. 产生稀疏数组的方式: ① 通过不连续的索引给元素赋值 ② 修改数组的 length 比原来的长度大
4. 使用(读取)没有值的元素,会自动得到 undefined
5. 注意: 尽量避免稀疏数组
2.5 数组的遍历(迭代)
// 1 使用循环遍历数组
for (var i = 0; i < arr.length; i ++) {
arr[i]; // 获取到了数组的元素
}
// 2 使用 for in 结构遍历数组
for (var i in arr) {
arr[i]; // 获取到数组的元素
}
注意: 推荐使用循环的方式遍历数组, 因为 for in 遍历不是针对数组的而是针对所有对象类型的数据。
2.6 数组元素的添加和删除
① 添加元素
1. 利用数组的 length 指定下一个新元素的索引
arr[arr.length] = 新元素的值;
2. 使用 push() 方法在数组后面追加一个或多个元素
arr.push(新元素);
arr.push(新元素1, 新元素2 ...)
3. 使用 unshift() 方法在数组的前面添加一个或多个元素
arr.unshift(新元素);
arr.unshift(新元素1, 新元素2 ...)
4. 使用 splice() 在指定位置插入一个或多个新元素
arr.splice(索引, 0, 新元素);
arr.splice(索引, 0, 新元素1, 新元素2 ...);
② 删除元素
1. 通过修改 length 的值达到删除元素的目的
arr.length -= n; // 表示删除数组的后 n 个元素
2. 使用 pop() 删除数组的最后一个元素
arr.pop(); // 一次只能删除一个
3. 使用 shift() 删除数组的第一个元素
arr.shift() // 一次只能删除一个
4. 使用 splice() 删除指定位置指定数量的元素
arr.splice(index, n); // 从索引是 index 的元素开始删除 n 个
2.7 多维数组
如果数组的元素仍然是个数组,该数组就是多维数组,分为 二维数组、三维数组 等
[
[100,200,300,400,500],
['刘姥姥', '牛姥姥', '马姥姥'],
['A', 'B', 100, 'C', 'D', 9021, true, undefined],
[
[10, 20, 30, 40],
[100, 200, 300, 400],
[100, 200, 300, 400]
]
];
2.8 字符串的数组特性
1. 字符串具有一些数组特性:
① 字符串中的字符也具有索引,通过索引可以读取字符
② 字符串有length,可以获取字符串长度(字符个数)
③ 可以使用循环遍历字符串中所有的字符
2. 字符串只是具备一部分数组特性,不是全部
① 无法通过索引修改字符
② 字符串的 length 也无法修改
3. Like-Array 类数组或者伪数组
字符串类似于是由字符组成的数组,具有数组的一部分特性
这样数据就被认为是伪数组