认识数组
创建数组的方式有三种:
// 对象字面量
var arr = [1, 2, 3, 4, 5]; // 字面量
// 通过系统内置的Array构造函数(不推荐)
var arr1 = new Array();
// 直接 Array(一般不使用)
var arr2 = Array();
:::info
所有的数组都继承于**Array.prototype**
,所以可以使用数组的方法。
:::
数组底层的机制和Object
是一样的:
每个元素在数组中都有一个下标index
,数组的下标从0
开始,数组的下标类似object
的key
键名。
var arr = [1, 2, 3, 4, 5];
// 用对象表示如下
var obj = {
0: 1,
1: 2,
2: 3,
3: 4,
4: 5
}
当数组访问一个元素的是通过下标index
来访问的:
arr[0]; // 1
arr[3]; // 4
这种数组[下标]
的形式其实就是利用对象最开始的底层机制:
obj.name; // 底层机制就是 obj["name"]
obj[0]; // 1
obj[3]; // 4
说白了数组就是对象的另外一种形式。
数组的空值
创建对象的时候可以占位赋值空值,这样的形式也叫做「稀松数组」。
在使用字面量和Array
构造函数创建数组的时候也有区别:
var arr = [, 2, 3, 4, 5,]; // 末尾的逗号会被忽略
console.log(arr.length); // 5
var arr = new (, 1, 2, , 3, 4,); // error,构造函数创建数组,不能有空值
var arr = new Array(5); // [empty*5] 5个空的值,相当于设置一个空数组的长度 [, , , ,]
var arr = new Array(5.2); // error,参数只有一个的时候只能是整数
访问数组下标
访问数组不存在的下标会返回undefind
,这和obj
访问一个不存在的属性是一样的:obj.name
返回undefind
var arr = [1, 2, 3, 4, 5];
console.log(arr[5]); // undefind
arr[5] = "test1";
arr[0] = "test2";
console.log(arr);
通过数组的下标可以实现对数组元素的查、增、改:
var arr = [1, 2, 3, 4, 5];
// 查
arr[0]; // 1
// 增
arr[5] = 6; // [1, 2, 3, 4, 5, 6]
// 改
arr[1] = "test"; // [1, 'test', 3, 4, 5, 6]