2.5JavaScript类型之数组(Array)

数组的索引是整数类型。

数组的索引是有序的。

数组的元素可以是任何 JavaScript 数据类型,且不必都是同一个类型。

数组的元素的个数(长度)可以动态改变,可以添加、更改、删除元素。

数组的元素可以重复。

1.索引数组

注意:最后一个元素后面允许有逗号 ,,这样要添加一个新元素时很方便。

//字面量创建方式

//创建一个空数组
let a = [];

//创建一个数组长度为N的数组(直接填入元素)
let a = [元素1, 元素2, 元素N];
//Array()函数创建方式(加与不加new都一样)

//创建一个空数组
let a = [new] Array();

//创建一个数组长度为N的稀疏数组(具体见下面的稀疏数组章节)
let a = [new] Array(N);

//创建一个数组长度为N的数组(直接填入元素)    
let a = [new] Array(元素1, 元素2, 元素N);

2.稀疏(Sparse)数组

let a = [1, , 3];
console.log(a);

//输出
Array(3) [ 1, <1 empty slot>, 3 ]
​  0: 1
​  2: 3
​  length: 3

从上面的示例中,我们不难发现,空槽(empty slot)作为一种特殊的元素,与普通的元素相比:

相同点:空槽的索引为 1,因此 length 属性的值为 3

不同点:空槽不占用元素的实际个数,这就导致了输出的元素的索引不连续。

所以像这种 length 属性的值大于元素的实际个数的数组,我们称之为稀疏(Sparse)数组。反之,就是紧凑(Dense)数组。

注意:由于不同的数组方法对待空槽的行为不同,以及空槽存在性能隐患,因此实践中要避免使用空槽。如果确实需要使用空槽,则可以显式地使用 undefined 值代替空槽。

//字面量创建方式

//空槽在前面
//示例一
let a = [, 2, 3];
console.log(a);  // Array(3) [ <1 empty slot>, 2, 3 ]
//示例二
let a = [,];
console.log(a);  // Array(1) [ <1 empty slot> ]

//空槽在中间
let a = [1, , 3];
console.log(a);  // Array(3) [ 1, <1 empty slot>, 3 ]

//空槽在末尾
//注意:末尾的逗号是为了添加一个新元素时方便,不是空槽。
let a = [1, 2, ];
console.log(a);  // Array(2) [ 1, 2 ]
//Array()函数创建方式(加与不加new都一样)

//创建一个数组长度为5的稀疏数组
let a = [new] Array(5);
console.log(a);  // Array(5) [ <5 empty slots> ]

//不支持此语法创建稀疏数组     
let a = [new] Array(元素1, 元素2, 元素N);

3.访问数组

//正数索引从左往右从0开始,不支持负数索引。

//查看
let v = a[索引];

//添加或更改
a[索引] = 元素;

//删除
a.splice(开始索引, 删除数量);

4.数组长度

注意:1个空槽占用1个数组的长度。

//查看长度
let v = a.length;

//更改长度
//如果非负整数值小于原来的数组长度,则会从数组末尾删除元素。
//如果非负整数值大于原来的数组长度,则会从数组末尾添加空槽。
a.length = 非负整数值;

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/35242.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2020年9月4日 02:23
下一篇 2020年9月6日 17:55

相关推荐

  • 2.4JavaScript类型之符号(Symbol)

    一个符号实例用于表示一个唯一的标识符。 1.创建符号实例 注意:符号实例不支持字面量创建方式。 注意:符号实例不支持 new Symbol() 创建方式。 Symbol() 函数可选地接受一个字符串实参,字符串实参仅仅作为对符号实例的描述,将来可以通过这个字符串实参来调试代码,不影响任何事情。 Symbol() 函数的…

  • 1.7JavaScript语言的函数(Function)

    1.函数定义 函数声明、函数表达式、箭头函数表达式都是 Function 类型的实例。 1.1函数声明 1.2函数表达式 注意:命名函数表达式的右侧依然是函数表达式,不是函数声明。 注意:命名函数表达式的函数名 f2 的作用域仅仅为函数体,比如可用于函数递归,但不可以在函数体外使用。 1.3箭头函数表达式 没有形参或多…

  • 2.1JavaScript语言的ES模块(Module)

    ES 模块用于在浏览器环境和服务器环境中使用。 模块就是以 .js 为扩展名的 JavaScript 文件。 普通脚本文件内的顶级的成员对其它脚本文件来说是公开(public)的全局上下文,而模块文件内的顶级的模块成员对其它模块文件来说都是私有(private)的,所以首先需要在模块中将它们显式导出,然后在其它模块中显…

发表回复

登录后才能评论