数组

数组的定义

常见的数组有三种:索引数组、关联数组、稀疏数组。

其中只有索引数组在官方文档中提及,后两种均未提及。

  1. 索引数组:索引值为数字得数组

    1
    2
    var arr1 = [1, 2, 3, 4, 5];
    console.log(arr1[0]); // 通过索引访问
  2. 关联数组(对象替代):索引值为字符串得数组

    1
    2
    3
    4
    var arr2 = new Array();
    arr2["name"] = "lilei";
    arr2["age"] = 18;
    console.log(arr2);
  3. 稀疏数组:数组长度与数组元素个数不一致

    1
    2
    3
    4
    var arr3 = new Array();
    arr3[15] = 100;
    arr3[34] = 200;
    console.log(arr3);

以上三种数组的长度

1
2
3
4
5
6
7
8
console.log("arr1的长度:", arr1.length);
console.log("arr2的长度:", arr2.length);
console.log("arr3的长度:", arr3.length);
/*
arr1的长度: 5
arr2的长度: 0
arr3的长度: 35
*/

所以可以得到对于索引数组,长度是有效的;但对于关联数组无法获取长度。而对于稀疏数组,取决于键。

数组长度是可变的,例如声明数组长度为10,那么当元素超过10个时,会自动扩容

1
2
3
4
5
var arr = new Array(5);
arr[3] = 100;
arr[5] = "a";
arr[8] = true;
console.log(arr.length); //输出9

数组的类型

关于数组的类型,无论哪种方式定义数组,数组都是引用类型

1
2
3
4
5
6
7
// 1.字面量/直接量
var arr1 = [];
// 2.构造函数方式
var arr2 = new Array();
// JavaScript语言中的数组无论哪一种方式定义,都是引用类型
console.log(typeof arr1, typeof arr2); // object object
console.log(arr1 instanceof Array, arr2 instanceof Array);//true true

数组中删除元素

删除数组中的元素使用的是delete关键字,但是此删除本质上是将原内容置空。这就会导致数组长度并不会变化。

1
2
3
var arr = [1, 2, 3, 4, 5];
delete arr[2];
console.log(arr, arr.length); //输出5