数组
数组是值的 有序集合。
js中数组是无类型的。
js中数组的索引是基于零的32位数值,最大能容纳 2^32-1 个元素。
js中数组是动态的,不需手动分配空间。
js中数组可能是稀疏的:数组元素的索引不一定要连续,之间可以有空缺。
数组继承自 Array.prototype ,是js对象的特殊形式( {'0':0} && [0] ).
数组的实现经过优化,用数组索引访问数组元素比对象访问属性快。
数组直接量中的值可以是任意表达式。
直接量语法允许可选的结尾的逗号。 [,].length 1 [,,].length 2 [,,,3].length 4
构造函数创建数组三种形式:
new Array() []
new Array(10) [empty × 10]
new Array(10,20) [10, 20]
[1,2][1.00] 2
[1,2]['1.00'] undefined 数组回归对象本性
稀疏数组 索引处值为 undefined \empty 区别:
0 in [,,,] false
0 in [undefined,undefined,,] true
0 in new Array(3) false
var a=[1,2,3]
a.length=2 [1, 2] // 截断
a.length=5 [1, 2, empty × 3] // 扩展原有长度 不存在元素为空
es5 提供设置属性为只读 var a=[1,2,3]
Object.defineProperty(a,'length',{'writable':false});
a.length=0
a [1, 2, 3]
delete 不改变数组长度 (delete数组元素后,变为稀疏数组)
var a=[1,2,3]
delete a[1] // true
a // [1, empty, 3]
1 in a // false
push pop 数组尾部增减
unshift shift 数组首部增减
splice 插入、删除、替换数组元素
for in 与常规 for循环相比,推荐使用常规 for 循环
for in 能枚举继承的属性名 for(var i in a){ if( !a.hasOwnProperty(i) ) continue; //code body } //筛选
for in 循环不一定按顺序执行(可能是按照创建顺序执行)
es5 forEach [1,2].forEach(function(x){ // code });