- 任何类型的数据,都可以放入数组
var arr = [
{a: 1},
[1, 2, 3],
function() {return true;}
];
arr[0]
arr[1]
arr[2]
- 数组是一种特殊的对象
typeof [1, 2, 3]
let arr = [1,3,4];
Object.keys(arr);
arr['0'];
arr[0];
- length 属性是可写的
var arr = [ 'a', 'b', 'c' ];
arr.length
arr.length = 2;
arr
var a = ['a'];
a.length = 3;
a[1]
- 清空数组的一个有效方法,就是将length属性设为0。
arr.length = 0;
arr
- 由于数组本质上是一种对象,所以可以为数组添加属性,但是这不影响length属性的值。
var a = [];
a['p'] = 'abc';
a.length
a
- 如果数组的键名是添加超出范围的数值,该键名会自动转为字符串。
var arr = [];
arr[-1] = 'a';
arr[Math.pow(2, 32)] = 'b';
arr.length
arr[-1]
arr[4294967296]
in运算符
- 检查某个键名是否存在的运算符in,适用于对象,也适用于数组。
var arr = [ 'a', 'b', 'c' ];
2 in arr
'2' in arr
3 in arr;
for … in
- for ... in也可以遍历数组,毕竟数组只是一种特殊的对象,但是for...in不仅遍历数组的数字键 还会遍历非数字键, 所以不推荐用for...in遍历数组
var a = [1, 2, 3];
a.foo = true;
for (var key in a) {
console.log(key);
}
- 使用delete命令删除一个数组成员,会形成空位,并且不会影响length属性。
var a = [1, 2, 3];
a.length;
delete a[1];
a.length;
console.log(a[1]);
- 数组的空位使用forEach方法 for...in结构 以及Object.keys方法进行遍历 ,空位都会被跳过;
但如果是undefined就不会被跳过。
var a = [undefined, , ,];
a.forEach(function(x, i) {
console.log(i + ". " + x);
});
for (var i in a) {
console.log(i);
}
Object.keys(a);
- '类似数组的对象':一个对象的所有键名都是正整数或零,并且有length属性,那么这个对象就很像数组,语法上称为“类似数组的对象”(伪数组)。
a.它的length属性不是动态的,不会随着成员的变化而变化;
b.它没有数组的方法
c.典型的’类似数组的对象‘有:函数的arguments对象,大多数DOM元素集,字符串
d.可以利用数组的slice方法将’类似数组的对象‘变成真正的数组
var arr = Array.prototype.slice.call(arrayLike);
e:还有一个办法可以让'伪数组'使用数组的方法:通过call()把数组的方法放到对象上面
function print(value, index) {
console.log(index + ' : ' + value);
}
Array.prototype.forEach.call(arrayLike, print);