2.5JavaScript引用类型之数组(Array)

数组是一种特殊的对象。

  • 数组的索引是隐式的整数类型。
  • 数组的索引是有序的,包含 length 个元素的数组从 0 索引到 length-1
  • 数组的元素可以是任意类型,且不必都属于同一个类型,可以随时更改元素从而更改元素的类型。
  • 数组的元素的个数(长度)可以动态改变,可以向数组添加、更改、删除元素。
  • 数组的元素允许重复的元素。

1.索引数组

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

//字面量创建方式

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

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

//创建一个空数组
//等同的数组字面量创建方式let arr = [];,但数组字面量创建方式实际上并不会调用Array()构造函数。
let arr = [new] Array();

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

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

2.稀疏(Sparse)数组

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

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

从上面的示例中,我们不难发现,空槽(empty slot)占用数组的长度,但是数组不存在空槽这个元素,换句话说,对象不存在空槽这个属性。

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

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

//字面量创建方式

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

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

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

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

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

3.多维数组

JavaScript 语言没有专门的多维数组语法,但是一个数组可以作为另一个数组的元素存在。

//字面量创建方式
let arr = [ [1, 2], [3, 4, 5], [6, 7, 8, 9] ];
//Array()函数创建方式(加与不加new都一样)
//注意:不支持let arr = [new] Array(5)(6);语法创建多维数组;
let arr = [new] Array( [1, 2], [3, 4, 5], [6, 7, 8, 9] );

4.访问数组中的元素

可以使用变量名后跟方括号 [] 包含索引的方式来访问数组中索引对应的元素。

另外,还可以使用 at() 实例方法访问数组中索引对应的元素。

注意:负数索引 index,本质上是 arr.length + index 的正数索引。

区别浏览器最低版本要求是否支持负数索引不存在的索引
[]Chrome 1、Firefox 1、Safari 1。不支持返回 undefined
at()Chrome 92、Firefox 90、Safari 15.4。支持返回 undefined
//[]
//正数索引从左往右从0开始,不支持负数索引。

//查看
let a = arr[索引];
let a = arr[索引1][索引2];

//添加或更改
arr[索引] = 值;
arr[索引1][索引2] = 值;

//删除
//元素被删除后为空槽,数组长度不变。
delete arr[索引];
delete arr[索引1][索引2];
//at()
//正数索引从左往右从0开始,负数索引从右往左从-1开始。

//查看
let a = arr.at(索引);
let a = arr.at(索引1).at(索引2);

//添加或更改(不支持此语法)
arr.at(索引) = 值;
arr.at(索引1).at(索引2) = 值;

//删除(不支持此语法)
delete arr.at(索引);
delete arr.at(索引1).at(索引2);

5.数组长度

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

//查看长度
let len = arr.length;

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

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

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2020年9月4日
下一篇 2020年9月6日

相关推荐

  • 2.3JavaScript原始类型之符号(Symbol)

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

  • 2.11JavaScript语言的异步函数

    1.异步函数声明 如果您想声明一个异步函数,只需要首先在普通函数前添加一个 async 关键字,然后在函数体内至少包含一个 await 关键字即可。普通函数支持函数声明、函数表达式、箭头函数、立即调用的函数表达式和实例方法。 2.await表达式 await 关键字后的表达式可以是 实现了 Thenable 接口的对象…

  • 1.6JavaScript语言的常量(Constant)

    1.常量声明 注意:在同一个作用域,相同名称的常量不可以重复声明,否则会报错。 常量在赋值后不可以通过重新赋值改变其值,即使新的值与老的值相同也不可以。 如果一个常量存储的是对象的引用,意味着此常量总是引用同一个对象,但是,改变对象的属性的值是可以的。 注意:属性新的值的类型不一定与属性老的值的类型相同。 2.常量声明…

发表回复

登录后才能评论