使用数组直接量是创建数组最简单的方法,在方括号中将数组元素用逗号隔开即可:
//没有元素的数组
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 = [,,];
调用构造函数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属性值大于元素的个数。可以说数组长度保证大于它每个元素的索引值。或者,换一种说法,肯定找不到一个元素的索引值大于或等于它的长度。
为了维持上述规则不变化,数组有两个特殊的行为:
//从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属性值设置为大于其当前的长度。实际上这不会向数组中添加新的元素,它只是在数组尾部创建一个空的区域。