定义:数组是值的有序集合。每个值叫做一个元素,而每个元素值数组中有一个位置,以数字表示,成为索引。JavaScrpt数组是无类型的(数组可以是任意类型,并且同一个数组的不同元素也可能有不同的类型)JavaScrpt数组的索引是基于零的32位数值:第一个元素的索引是0,最大可能的所有是4294967294(2^32-2)。JavaScrpt数组是动态的。
创建数组(省略的元素将被赋值为undefined):
1、数组直接量(在方括号中将数组元素用逗号分隔开即可。)
var empty=[] //空数组
var misc=[1.1,true,"a0",] //3个不同类型的元素和结尾的逗号
2、调用构造函数Array( )是创建数组的另一种方法。
var a=new Array(); //调用没有参数,创建一个没有任何元素的空数组,等同于[]
var a=new Array(10); //表示数组的长度
var a=new Array(5,3,4,"testing") //显试指定两个或多个数组元素或者数组的一个非数值元素
数组元素的读和写(使用[]操作符来访问数组中的一个元素)
数组是对象的特殊形式。数值转换为字符串,字符串作为属性名来用。数组没有“越界”错误的概念。
例如:var a=["world"];
var value=a[0]; //读第一个元素
a[1]=2; //写第二个元素
a[-1.23]=true; //这将创建一个名为“-1.23”的属性
a["1000"]=0; //这是数组第1001个元素
a[1.00] //和a[1]相等
稀疏数组(就是包含从0开始的不连续索引的数组,length属性值大于元素个数)
例如:
a=new Array(5); //数组没有元素,但a.length=5
a=[]; //创建一个空数组,length=0
a[1000]=0; //赋值添加一个元素,但是设置length=1001
var a1=[,,,]; //[undefined,undefined,undefined]
注意:当中数组直接量中直接省略值不会创建稀疏数组。当省略数组直接量中的值时,所得到的数组也是稀疏数组,省略掉的值是不存在的。
var a1=[,]; //此数组没有元素,长度为1
数组长度(针对稠密数组,length属性值代表数组元素的个数,其值比数组中最大的索引大1)
例如:
[].length //=>0
['a','b','c'].length //=>3
如果为一个数组元素赋值,它的索引i大于或等于现有数组的长度时,length属性的值将设置为i+1
设置length属性为一个小于当前长度的非负整数n时,当前数组中那些索引值大于或等于n的元素将从中删除;还可以将数组的length属性值设置为大于其当前长度,实际上这不会向数组添加新的元素,它只是在数组尾部创建一个空的区域。
数组元素的添加和删除
添加:1、为新索引赋值
2、 使用push()方法在数组末尾增加一个或多个元素,也可以使用unshift()方法在数组的首部插入一个元素,并且将其他元素依次移到更高的索引处。
删除:1、删除对象属性一样使用delete运算符来删除数组元素(delete操作并不影响数组长度)。对一个数组元素使用delete不会修改数组的length值,也不会将元素从高索引处移下来填充已经删除属性留下的空白。如果从元素中删除一个元素,它就变成了稀疏数组。
2、使用pop()方法,或者shift()方法。
最后,splice()是一个通用的方法来插入、删除或替换数组元素。
数组遍历
使用for循环是遍历数组元素最常见的方法
例如:
var keys=Object.keys(o); //获得o对象属性名组成的数组
var values=[]; //在数组中存储匹配属性的值
for(var i=0;i<keys.length;i++){ //对数组中每个索引
var key=keys[i]; //获得索引处的键值
values[i]=o[key]; //在values数组中保持属性值
}
补充:还可以使用for/in循环处理稀疏数组
多维数组:JavaScript不支持真正的多维数组,但可以用数组的数组来近似。
数组方法(见上一篇博客数组 Array相关函数)
数组类型:给定一个未知的对象,判定它是否为数组通常非常有用。在ECMAScript 5中,可以使用Array.isArray()函数来做这件事情。(typeof对数组返回“对象”,并不能判定它是否是数组)
类数组对象
JavaScript数组的特性:
- 当有新的元素添加到列表中时,自动更新length属性。
- 设置length为一个较小值将截断数组。
- 从Array.prototype中继承一些有用的方法
- 其类属性为Array
为一个常规对象增加了一些属性使其变成类数组对象,然后遍历生成的伪数组的“元素”
var a={}; //从一个常规空对象开始
//添加一些属性,称为“类数组”
var i=0;
while(i<10){
a[i]=i*i;
i++;
}
a.length=i;
//现在,当做真真的数组遍历它
var total=0;
for(var j=0;j<a.length;j++){
total+=a[j];
}
作为数组的字符串:字符串的行为类似于只读数组,除了用chartAt()方法来访问单个字符以外,还可以使用方括号。
var s=test;
s.chartAt(0); //=>'t'
s[1]; //=>'e'
当然,对字符串的typeof操作符依旧返回String。字符串是不可变值,是只读的,即不可修改,并且如果使用数组方法来修改字符串会导致错误(出错的时候没有提示)。