认识数组

创建数组的方式有三种:

  1. // 对象字面量
  2. var arr = [1, 2, 3, 4, 5]; // 字面量
  3. // 通过系统内置的Array构造函数(不推荐)
  4. var arr1 = new Array();
  5. // 直接 Array(一般不使用)
  6. var arr2 = Array();

:::info 所有的数组都继承于**Array.prototype**,所以可以使用数组的方法。 :::

数组底层的机制和Object是一样的:
每个元素在数组中都有一个下标index,数组的下标从0开始,数组的下标类似objectkey键名。

  1. var arr = [1, 2, 3, 4, 5];
  2. // 用对象表示如下
  3. var obj = {
  4. 0: 1,
  5. 1: 2,
  6. 2: 3,
  7. 3: 4,
  8. 4: 5
  9. }

当数组访问一个元素的是通过下标index来访问的:

  1. arr[0]; // 1
  2. arr[3]; // 4

这种数组[下标]的形式其实就是利用对象最开始的底层机制:

  1. obj.name; // 底层机制就是 obj["name"]
  2. obj[0]; // 1
  3. obj[3]; // 4

说白了数组就是对象的另外一种形式。

数组的空值

创建对象的时候可以占位赋值空值,这样的形式也叫做「稀松数组」。
在使用字面量和Array构造函数创建数组的时候也有区别:

  1. var arr = [, 2, 3, 4, 5,]; // 末尾的逗号会被忽略
  2. console.log(arr.length); // 5
  3. var arr = new (, 1, 2, , 3, 4,); // error,构造函数创建数组,不能有空值
  4. var arr = new Array(5); // [empty*5] 5个空的值,相当于设置一个空数组的长度 [, , , ,]
  5. var arr = new Array(5.2); // error,参数只有一个的时候只能是整数

访问数组下标

访问数组不存在的下标会返回undefind,这和obj访问一个不存在的属性是一样的:obj.name返回undefind

  1. var arr = [1, 2, 3, 4, 5];
  2. console.log(arr[5]); // undefind
  3. arr[5] = "test1";
  4. arr[0] = "test2";
  5. console.log(arr);

通过数组的下标可以实现对数组元素的查、增、改:

  1. var arr = [1, 2, 3, 4, 5];
  2. // 查
  3. arr[0]; // 1
  4. // 增
  5. arr[5] = 6; // [1, 2, 3, 4, 5, 6]
  6. // 改
  7. arr[1] = "test"; // [1, 'test', 3, 4, 5, 6]