1、创建数组的方式
(1)、数组直接量
var empty=[ ];
var undefs=[ , ,];
(2)、调用构造函数
var a=new Array();
var a=new Array(5,4,3,2,1,"testing"} //js是一种非类型语言,数组中元素类型可以不一致
var a=new Array(10);
2、数组元素的读和写
i=2;
a[i]=3;
a[i+1]="hello";
a[a[i]]=a[0];
数组元素下标大于等于0,小于2的32次方减1,若超出这个范围或是负数、浮点数等,js将其转为字符串作为对象属性名,而不是数组下标。
a[-1.23]=true;
3、添加数组元素,js不像java等一旦申明数组长度将保持不变,js中数组元素的个数是随时可以改变,且数组元素的下标不必在某个连续整数范围内,只有那些在数组中存在的元素才会被分配内存
a[0]=1;
a[999]=999;//只有下标是0或是999的元素才会被分配内存,之间的元素将不会被分配内存
4、删除数组
delete运算符只是将数组元素值赋予了undefined,数组元素还存在;真正删除数组元素用shift
5、数组的长度
和常规的对象属性不同,数组的长度是动态更新的
var a=new Array();//a.length==0
a=new Array(10);//a.length==10
a=new Array(1,2,3)//a.length==3;
a=[5,6];//a.length==2
a[49]=0;//a.length==50
由于数组中可能还有undefined元素,所以数组的长度是数组中元素的最大下标数加1
6、遍历数组元素
若数组元素下标是连续的可以用常规的for循环迭代元素,一般在迭代前我们要检验数组元素是否被定义
for(var i=0;i<a.length;i++)
if(a[i])alert(a[i]);
7、截断和增长数组
若数组长度被赋予了比实际数组元素个数小的值,多余的元素将被丢弃;
若数组长度被赋予了比实际数组元素个数小的值,将在数组的尾部添加undefined类型的值,使得二者一致;
8、多维数组
原则上js是不支持多维数组的,但可以给数组中的元素赋予数组类型的值
9、数组中的方法
(1)、join( )
var a=[1,2,3];
s=a.join(","); //s=='1,2,3' 默认的也是采用','链接
(2)、reverse( ):跌倒原数组中的元素,而不是新创建一个数组
var a=new Array(1,2,3);a[0]=1
a.reverse( );//a[0]=3
var s=a.join;//s="3,2,1"
(3)、sort( ):默认采用字母表顺序排列
var a=[33,4,11,22];
a.sort( );//[11,22,33,4];
a.sort(function(a,b){return a-b});//数字顺序,[4,11,22,33]
(4)、contact():链接数组函数,会拆分一级参数数组
var a=[1,2,3,4];
a.contact(5,6);//a==[1,2,3,4,5,6]
a.contact([5,6]);//a==[1,2,3,4,5,6];
a.contact(4,[5,[6,7]);//a==[1,2,3,4,5,[6,7]]
(5)、截取子数组
var a=[1,2,3,4,5,6];
a.slice(0,3);//[1,2,3]
a.slice(3);//[4,5,6]
a.slice(1,-1);//[2,3,4,5,6]从第一个开始一直截取到最后一个
(6)、splice( ):插入或删除数组
var a=[1,2,3,4,5,6,7,8,9,10];
a.splice(4);//a is [1,2,3,4]
a.splice(1,2);//a is[1,4]
a.splice(1,1);//a is[1]
以上是截取,该函数还有插入功能(确切的说是截取加插入)
var a=[1,2,3,4,5];
a.splice(2,0,'a','b',);//a is[1,2,'a','b',3,4,5]
a.splice(2,2,[1,2],3);//a is [1,2,[1,2],3,3,4,5]
splice在插入元素的时候,并不将插入的元素展开
(7)、push() pop():元素添加到数组的尾部,或从尾部取出
var stack=[ ];
stack.push(1,2);//stack:[1,2]
stack.pop();//stack:[1]
stack.push([4,5]);//stack:[1,[4,5]]
stack.pop();//stack:[1]
(8)、unshift() shift():在数组的头部插入或删除数据,插入多个数据的时候一次性插入即插入元素的顺序不变
var a=[];
a.unshift(1);//a[1]
a.unshift(22);//a[1,22]
a.shift();//a[1]
a.unshift(3,[4,5]);a[3,[4,5],1]
(9)、toString( ):将数组中的元素转为字符串,然后输出这些字符串列表,字符串之间用逗号隔开
[1,2,3].toString();//'1,2,3'
["a","b","c"].toString();//'a,b,c"
[1,[2,'c']].toString();//'1,2,c'
10、类似数组的对象
var a={ };
var i=0;
while(i<10){
a[i]=i*i;//把i看成是对象的属性,js会把整形的i转为字符串类型,这里是采用关联数组的方式访问对象的属性
i++;
}
a.length=i;
var total=0;
for(var j=0;j<a.length;j++)
total+=a[j];