从零开始学web开发之JavaScript-4.数组

本节内容引用 《JavaScript 标准参考教程(alpha)》,by 阮一峰

1.定义

  • 数组array,是一种特殊的对象,typeof 返回object.
  • 数组用来在单独的变量名中存储一系列的值,存储的值按次序进行排列,数组下标从0开始。
  • 如果数组的元素还是数组,就形成了多维数组。
var a = [[1, 2], [3, 4]];
a[0][1] // 2
a[1][1] // 4

2.创建数组

方式一:直接定义数组变量,用方括号包含值。

var  arr1 = [9,5,2,7];

也可以先定义再赋值。

var arr1;
arr1[0] = 9;
arr1[1] = 5;
arr1[2] = 2;
arr1[3] = 7;

注意:数组可以包含任意类型的值,不一定是同一类型的值。

var arr2 = ['a',1,true,9.2].

上述定义也是合法的。

方式二:创建对象Array的方式

var arr3 = new Array();
arr3[0] = 10;
arr3[1] = 8;
arr3[2] = 3.6;

或者是

var arr3 = new Array(10,8,3.6);

3.length属性

  • length属性表示数组中存储有效成员的个数,有效成员的定义是键名是整数的成员,包含可将键名转为整数的成员(如整数数字字符串,小数点后为0的浮点数)。
  • length的值是动态的,等于键名中的最大整数加上1。
  • length属性是可写的,可以用array.length直接赋值,或者用new Array(n)定义大小,n就是length的值。
    • 如果人为设置一个小于当前成员个数的值,该数组的成员会自动减少到length设置的值,将数组清空的一个有效方法,就是将length属性设为0。
  • 如果人为设置length大于当前元素个数,则数组的成员数量会增加到这个值,新增的位置都是空位-值为undefined。

length的合法值

  • 不合法值报RangeError: Invalid array length
  • 只能是数值,字符串与其它类型都会报错。
  • 只能是正数,负数会报错。
  • 只能小于2^32-1,即是4294967295,否则会报错。

4.遍历数组

遍历数组与遍历对象键名的方法一致。

方式一:for…in 循环和数组的遍历

var a = [1, 2, 3];

for (var i in a) {
  console.log(a[i]);
}
// 1
// 2
// 3

但是,for…in不仅会遍历数组所有的数字键,还会遍历非数字键。

var a = [1, 2, 3];
a.foo = true;

for (var key in a) {
  console.log(key);
}
// 0
// 1
// 2
// foo

上面代码在遍历数组时,也遍历到了非整数键foo。所以,不推荐使用for…in遍历数组。

方式二:for循环遍历

for (var i = 0;i<a.length;i++) {
  console.log(a[i]);
}
// 1
// 2
// 3

5.操作数组

空位概念

当数组的某个位置是空元素,即两个逗号之间没有任何值,我们称该数组存在空位(hole)。

var a = [1, , 1];
a.length // 3

上面代码表明,数组的空位不影响length属性。
需要注意的是,如果最后一个元素后面有逗号,并不会产生空位。
也就是说,有没有这个逗号,结果都是一样的。
数组的空位是可以读取的,返回undefined。

var a = [, , ,];
a[1] // undefined

删除数组成员-delete命令

使用delete命令删除一个数组成员,会形成空位,并且不会影响length属性。

var a = [1, 2, 3];
delete a[1];

a[1] // undefined
a.length // 3
  • length属性不过滤空位,使用length属性进行数组遍历是要注意。
  • 数组的某个位置是空位,与某个位置是undefined,是不一样的。
  • 如果是空位,使用数组的forEach方法、for…in结构、以及Object.keys方法进行遍历,空位都会被跳过。
var a = [, , ,];

a.forEach(function (x, i) {
  console.log(i + '. ' + x);
})
// 不产生任何输出

for (var i in a) {
  console.log(i);
}
// 不产生任何输出

Object.keys(a)
// []

如果某个位置是undefined,遍历的时候就不会被跳过。

var a = [undefined, undefined, undefined];

a.forEach(function (x, i) {
  console.log(i + '. ' + x);
});
// 0. undefined
// 1. undefined
// 2. undefined

for (var i in a) {
  console.log(i);
}
// 0
// 1
// 2

Object.keys(a)
// ['0', '1', '2']

这就是说,空位就是数组没有这个元素,所以不会被遍历到,而undefined则表示数组有这个元素,值是undefined,所以遍历不会跳过。
尽管他们读取的值都是undefined,但一个是显示的,一个是隐式的,两者的概念不一样。

6.示例网页

网页链接

发布了92 篇原创文章 · 获赞 68 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/pigdreams/article/details/80489954
今日推荐