数组是值的有序集合,每个值叫做元素,每个元素的位置叫做索引,数组索引从0位开始,JavaScript中的数组是无类型的,数组元素可以是任意的类型。
创建数组
直接量创建数组
var emptyArray = [];//创建一个元素为空的数组
var numberArray = [1,2,3,4,5,6,7,8,9,10];//创建一个有10个数值的数组
var misc = [0.1,false,"array"];//三个不同类型元素的数组
数组中的元素不一定是常量,也可以是任意的表达式
var baseNumber = 12345;
var baseNumArr = [baseNumber, baseNumber + 10, baseNumber -10];//元素为表达的数组
如果省略数组直接量中的某个值,省略掉的元素将会被赋予undefined
var num = [1,,3];//三个元素的数组,中间的元素为undefined
var unders = [,,];//两个元素的数组,全部都是undefined
//数组直接量中允许逗号[,]结尾,所以上面的unders只有两个元素
使用构造函数Array()创建数组
调用Array()函数时有一个数值参数时,它将指定数组的长度,如果调用Array()函数时传入了两个或多个参数将会被作为数组的元素。
var array = new Array();//创建一个空数组;
var array = new Array(5);//创建一个长度为5的数组
//这样创建的数组只是用来为数组预分配一个数组空间,数组中是没有储存值的
var array = new Array(1,2,3,"array",true);//创建数组,将传入Array()函数的参数作为数组的元素
操作数组[读和写,添加和删除]
操作数组使用 [] 操作符来访问数组中的元素。方括号里面是一个返回非负整数的任意表达式。使用这种语法可以实现对数组的 读 和 写 操作。
var array = ["hello","world"];//创建有两个元素的数组
var hello = array[0];//读取数组中索引为0的元素,⇒ hello
array[1] = "你好";//修改索引为1的元素,array = ["hello","你好"]
var i = 3;
array[i] = 3;//添加索引为i的元素;
delete array[i];//删除索引为i的元素
数组长度
每一个数组都会有一个 length 属性,这个属性将数组和常规的JavaScript对象区别开来,针对 稠密数组 length属性代表了数组中的元素个数,length的值比数组中的索引大1;
var empty = [];//空数组
empty.length;//⇒ length = 0;
[1,2,3].length;//⇒ 该数组中最大的索引为2,length = 3;
当为一个数组元素赋值时,当前元素索引的值大于或等于length属性时,length属性的值将会被设置为当前元素索引+1。
当设置一个数组中的length属性值为一个小于当前数组索引的正整数N时,当前元素中索引值大于或等于N的元素将会被删除。
对数组元素使用delete删除元素时,不会修改length属性,该数组将会变成稀疏数组。
http://www.cnblogs.com/ziyunfei/archive/2012/09/16/2687165.html
var array = [1,2,3,4,5];//包含5个元素的数组
array.length = 4;//array为[1,2,3,4]
array.length = 0;//删除了所有的元素,array为[]
array.length = 5;//array长度为5,但是元素为空,等同于new Array(5);
var delArray = [1,2,3,4,5];//length为5
delete delArray[2];//删除索引为2的元素;
delArray.length;//length依然为5,delArray为[1,2,,4,5]
遍历数组
使用For循环遍历数组
var forArray = ["a","b","c","d"];//字符串数组
var copyArray = [];//用于复制的数组;
for(var i = 0; i < forArray.length; i++){//循环
copyArray[i] = forArray[i];//将当前循环的索引对应的元素拷贝到新数组对应索引的位置
}
检测并跳过稀疏数组中的undefined和null值
var forArray = ["a","b","c","d"];//字符串数组
var copyArray = [];//用于复制的数组;
for(var i = 0; i < forArray.length; i++){//循环
if(!forArray[i]){//判断当前索引下元素是否为undefined或null
continue;//为空的话跳过本次循环
}
copyArray[i] = forArray[i];
}
常用方法
Array.join()
join()方法会将数组中所有元素都转化为字符串,并连接在一起,返回连接之后的字符串,join方法接收一个可选参数,用于指定元素之间的分隔符,参数为空时,分隔符默认为“,”(逗号),和 String.split() 方法相反,split()方法是将指定分隔符的字符串拆分为数组;
var array = ["a","b","c",1,2,3]
var str = array.join();//调用方法不传参数,str为"a,b,c,1,2,3"
var str2 = array.join("-");//使用[-]作为元素之间的分隔符,str为"a-b-c-1-2-3"
Array.reverse()
reverse()方法会将数组中的元素颠倒顺序,返回逆序数组。reverse()方法不会创建新的数组,而是在原本的数组上做排序。
var array = [1,2,3]
array.reverse().join("-");//结合reverse()和join(),输出"3-2-1"
Array.sort()
sort()方法将数组中的元素排序,同样只对原数组操作,当调用sort()方法时不带参数数组元素默认以字母表顺序排序,如果数组中包含undefined值,将会被排到数组的最后。
var array = ["c","a","b","d"];
array.sort().join();//输出"a,b,c,d"
也可以通过调用sort()方法时传入一个比较的函数来实现自定义排序,数值排序在前应当返回负数,排序在后返回正数,数值相等返回0
var array = [12345,12,34,2,231];
array.sort();//输出Array [ 12, 12345, 2, 231, 34 ]
//使用自定义排序
array.sort(function(a,b){
return a-b;//返回正数,负数,0
});
//输出Array [ 2, 12, 34, 231, 12345 ]
Array.push()
push()方法在数组的尾部添加一个或者多个元素,并返回数组型的长度。
var array = ["a","b","c"];
array.push(1,2);//返回5;
//array 现在为["a","b","c",1,2];
Array.pop()
pop()方法删除数组最后一个元素,减小数组长度,并返回方法删除的值,push()和pop()方法都是修改原始数组,不会生成修改后的新数组。
var array = ["a","b","c"];
array.pop();//返回"c";
//array 现在为["a","b"];