数组一些细节

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()。均不会改变原数组。

                

 

posted @ 2016-03-02 10:32  Walker-lyl  阅读(247)  评论(0)    收藏  举报