JS学习--数组(一)--2021-03-17


数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为下标,JavaScript数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型。数组的元素甚至也可能是对象或其他数组,这允许创建复杂的数据结构,如对象的数组和数组的数组。

一、创建数组

1.1 数组直接量是创建数组

使用数组直接量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可:

	//没有元素的数组
	let empty = [];
	//有5个数值的数组
	let primes = [2, 3, 4, 7, 9];
	//3个不同类型的元素
	let misc = [1.1, true, "a"];

使用数组直接量中的值不一定要是常量,它们可以是任意的表达式:

	let base = 1024;
	let table = [base, base+1, base+2];

它可以包含对象直接量或其他数组直接量:

	//多维数组
	let b = [[1,{x:1,y:2}], [2,{x:3,y:4}]];

如果省略数组直接量中的某个值,省略的元素将被赋予undefined值:

	//数组有3个元素,中间的那个元素值为undefined
	let count = [1,,3];
	//数组有2个元素,都是undefined
	let undefs = [,,];

1.2 构造函数创建数组

调用构造函数Array()创建数组有3种:
第一种:

	// 调用时没有参数
	let a = new Array();

该方法创建一个没有任何元素的空数组,等同于数组直接量[]。

第二种:

	//调用时有一个数值参数,它指定长度:
	let a = new Array();

创建指定长度的数组。当预先知道所需元素个数时,这种形式的Array()构造函数可以用来预分配一个数组空间。注意,数组中没有存储值,甚至数组的素引属性"0"、"1"等还未定义。

第三种:

	//显式指定两个或多个数组元素或者数组的一个非数值元素:
	let a = new Array(5, 4, 3, 2, 1, "toSting,testing");

二、数组元素的读和写

	//直接量创建数组
	let a = ["world"];
	//读第0个元素
	let valus = a[0];
	//写第1个元素
	a[1] = 6.66;
	//查看数组长度 ->2
	a.length;
	//这将创建一个名为"-1.23"的属性
	a[-1.23] = true;

注意:JavaScript数组没有“越界”错误的概念。当试图查询任何对象中不存在的属性时,不会报错,只会得到undefined值,类似于对象,不存在的属性,对象同样存在这种情况。

三、稀疏数组

稀疏数组就是包含从0开始的不连续索引的数组。通常,数组的length属性值代表数组中元素的个数。如果数组是稀疏的, length属性值大于元素的个数。

	//数组没有元素,但是a.length是5
	let a = new Array(5);
	//创建一个空数组, length = 0
	a = [];
	//赋值添加一个元素,但是设置length为1001
	a[1000] = 0;

四、数组长度

每个数组有一个length属性,就是这个属性使其区别于常规的JavaScrip对象。针对稠密(也就是非稀疏)数组,length属性值代表数组中元素的个数。其值比数组中最大的索引大1:

	// =>0--数组没有元素
	[].length
	// =>3--最大的索引为2, length为3
	['a','b','c'].length

当数组是稀疏的时, length属性值大于元素的个数。可以说数组长度保证大于它每个元素的索引值。或者,换一种说法,肯定找不到一个元素的索引值大于或等于它的长度。

为了维持上述规则不变化,数组有两个特殊的行为:

  1. 如同上面的描述:如果为一个数组元素赋值,它的索引i大于或等于现有数组的长度时, length属性的值将设置为i+1。
  2. 设置length属性为一个小于当前长度的非负整数n时,当前数组中那些素引值大于或等于n的元素将从中删除。
	//从5个元素的数组开始
	a = [1, 2, 3, 4, 5];
	//现在a为[1,2,3]
	a.length = 3;
	//删除所有的元素。a为[]
	a.length = 0;
	//长度为5,但是没有元素,就像new Array(5)
	a.length = 5;

还可以将数组的1ength属性值设置为大于其当前的长度。实际上这不会向数组中添加新的元素,它只是在数组尾部创建一个空的区域。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张德帅-001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值