数组一些细节
1.数组是特殊的对象,使用方括号访问数组元素就像用方括号访问对象的属性一样,JS将指定的数字索引值转换为字符串(例如 1 变为 ‘1’);来当做属性名来使用。
2.索引值是 0 ~ 2的32次方-2之间的整数。
3.(1)可以用负数或非整数来索引数组,这时,数值转换为字符串,字符串作为属性名来使用。
(2)如果使用非负整数的字符串,他被当做数组索引,而不是对象属性。
(3)当使用一个浮点数和一个非负整数相等,该浮点数被当做数组索引。
a[-1.23] = true; // 创建一个名为‘-1.23’的属性 a['1000'] = 0; // 这是数组的第1001个元素 a[1.000] // 和a[1]相等
4.拥有length属性值的有:数组,类数组,字符串,函数
(1). 数组的length值代表数组的长度,若为非稀疏数组,则代表数组的元素个数。类数组类似数组。
(2). 字符串的length值代表字符串的长度。
(3). 函数的length值代表函数形参的个数。(注意不是实际传入的数目,而是函数定义时设置的形参数目)
注意: 可以用typeof 来排除string和函数,字符串返回类型为string,函数返回类型为function
有关数组length修改的一些注意:
(1)当用push或其他方式向数组添加新元素,length值自动加1.
(2)当设置length值为一个小于当前长度的非负整数n时,当前数组中那些索引值大于或等于n的元素将被删除。
(3) 当设置length值为一个大于当前长度的非负整数时,将会在尾部创建空区域,但并不添加新元素,数组会变成稀疏数组
5.数组遍历时跳过一些不合法数据:
(1)跳过null 、undefined和不存在的元素 if(!arr[i]) continue;
(2) 跳过undefined和不存在的元素, if(a[i] === undefined) continue;
(3) 跳过不存在的元素 if(!(i in arr)) continue;
6.字符串的行为类似只读的数组(但其不是数组,使用Array.isArray()传字符串,返回的为false,使用typeof ,返回的是string)、
(1).除了可以用charAt()方法来访问单个字符以外,还可以像数组那样用方括号;
(2). 数组的一些不改变原数组的方法,字符串也可使用,例如join(),concat(),slice()。但像push(),sort(),pop(),reverse()等数组方法会修改数组,字符串无效,会报错
7.ES5.0中的一些数组方法:forEach(),map(),filter(),every()和some(),reduce()和reduceRight(),indexof()和 lastindeof()。均不会改变原数组。

浙公网安备 33010602011771号