length属性
JavaScript使用一个32位整数保存元素个数,也就是说,length属性的最大值是4294967295.
只要是数组,就一定有length属性,它的值就是动态的,等于键名中最大的整数加上1.
因为本质上,数组是一种特殊的对象,typeof 运算符会返回数组的类型是object 它的特殊性体现在它的键名是按次序排列的一组整数(0,1,2,...),数组成员的键名是固定的,不用为每个元素指定键名,但是在普通对象中,该指定的键名还得指定.
JavaScript语言规定,对象的键名一律为字符串,所以,数组的键名其实也是字符串,之所以可以用整数下标读取,是因为非字符串的键名会被转为字符串.比如 var a=[]; a[1.000] = 6; console.log(a[1]])//6
由于1.000转成字符串是1,所以通过数字1可以读取到数值.
数组的数字键名不需要连续.
length属性又是可写的,如果人为给length属性设置一个小当前数组成员个数的值,该数组的成员会自动减少到length设置的值.
清空数组的一个有效方法就是将length属性设置为0
如果设置length属性的值为大于当前成员个数的一个数值,则数组的成员数量会增加到这个值,新增的位置都是空位.读取这些空位的时候会返回 undefined
数组的空位与数组的某个位置是undefined是不同的,如果是空位,使用数组的forEach方法.for...in 以及Object.keys方法进行遍历,空位都会被跳过.
in运算符
检查一个键名是否存在的运算符 in ,适用于对象,当然也适用于数组.
var arr =['a','b','c']; 2 in arr//true '2' in arr//true 4 in arr//true
for...in 循环不仅可以遍历对象,也可以遍历数组,毕竟数组只是一种特殊的对象.
但是 for...in 不仅会遍历数组所有的数字键,还会遍历所有的非数字键,所以在业务中不推荐用 for...in 循环,数组的遍历可以考虑用for 或者 while 循环.
a.foo = true; for(var key in a){ console.log(key); }