数组
1.定义
数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。
var arr = [
{a: 1},
[1, 2, 3],
function() {return true;}
];
arr[0] // Object {a: 1}
arr[1] // [1, 2, 3]
arr[2] // function (){return true;}
相关说明:
1. 任何类型的数据都可以放入数组
2. 数组也可以先定义后赋值
3. 数组的本质属于一种特殊的对象。typeof
运算符会返回object
4. 其特殊性体现在:他的键名是按次序排列的一组整数(0,1,2…)
5. Javascript语言规定,对象的键名一律为字符串,所以数组的键名其实也是字符串。之所以可以用数值读取,是因为非字符串的键名会被转为字符串。
2.length属性
var arr = ['a', 'b'];
arr.length // 2
arr[2] = 'c';
arr.length // 3
arr[9] = 'd';
arr.length // 10
var arr1 = [ 'a', 'b', 'c' ];
arr1.length // 3
arr1.length = 2;
arr1 // ["a", "b"]
1. length属性是一个动态的值,等于键名中的最大整数加1
2. length属性是可写的,可改变数组成员的数量
3. 数组的遍历
1. for…in循环不仅可以遍历对象,也可以遍历数组,毕竟数组只是一种特殊对象
var a = [1, 2, 3];
a.foo = true;
for (var key in a) {
console.log(key);
}
// 0
// 1
// 2
// foo
由上可知for…in不仅会遍历数组所有的数字键,还会遍历非数字键。因此数组的遍历优先考虑使用for循环或while循环或者数组的forEach方法
var a = [1, 2, 3];
// for循环
for(var i = 0; i < a.length; i++) {
console.log(a[i]);
}
// while循环
var i = 0;
while (i < a.length) {
console.log(a[i]);
i++;
}
var colors = ['red', 'green', 'blue'];
colors.forEach(function (color) {
console.log(color);
});
// red
// green
// blue
4. 类似数组的对象
// arguments对象
function args() { return arguments }
var arrayLike = args('a', 'b');
arrayLike[0] // 'a'
arrayLike.length // 2
arrayLike instanceof Array // false
// DOM元素集
var elts = document.getElementsByTagName('h3');
elts.length // 3
elts instanceof Array // false
// 字符串
'abc'[1] // 'b'
'abc'.length // 3
'abc' instanceof Array // false
数组的slice方法可将类数组对象变成真正的数组
var arr = Array.prototype.slice.call(arrayLike);