简单总结
js数组的每一项可以保存任何类型的数据,js数组的大小可以动态调整,即随时可以随着数据的添加自动增长以容纳新数据(js是一种动态类型语言)
2种创建数组的基本方式:
第一种
var colors = new Array();
//如果预先知道数组要保存的项目数量
var colors = new Array(20);
//也可以向构造函数中添加元素
var colors = new Array("red","blue","green");
//另外,在使用Array构造函数时也可以省略new操作符:
var colors = Array(3);
var names = Array("sqliang");
第二种:字面量(推荐)
var colors = ['red','green','blue'];
var names = [];//创建一个空数组(注:**在使用字面量表示法时,不会调用Array构造函数**)
数组的属性:
数组的length属性是比较有特点的,它不仅仅是只读的,因此通过设置这个属性,可以从数组的末尾移出项或向数组添加新项.
检测数组
//ES3对于一个网页或者一个全局作用域而言,使用instancof可以得到满意的结果
if(colors instanceof Array){
}
//ES5,支持的浏览器有:IE9+、FireFox4+、Chrome,Safari5+,opera10.5+
if(Array.isArray()colors){
}
转换方法
colors.toString();//toString()返回由数组中每个值得字符串拼接而成的一个以逗号分隔的字符串
colors.valueOf();//返回的还是数组
colors.toLocalString();//也会返回与toString()和valueOf()方法仙童的值
栈方法(LIFO,Last-In-First-Out)
js为数组专门提供了push()和pop()方法,以方便实现类似栈的行为
push()方法可以接受任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度,pop()方法则从数组末尾移除最后一项,减少数组的length值,并返回移除的项。
var colors = new Array();
var count = colors.push("red","green");
console.log(count);//2
count = colors.push("black");
console.log(count);//3
var item = colors.pop();
console.log(item);//"black"
console.log(colors.length);
队列方法(FIFO,First-In-First-Out)
队列在列表的末端添加项(push()),从列表的前端移除项(shift(),移除数组的第一个项并返回该项,同时将数组length减1)
var colors = new Array();
var count = colors.push("red","green");
console.log(count);//2
count = colors.push("black");
console.log(count);//3
var item = colors.shift();
console.log(item);//"red"
console.log(colors.length);//2
js还为数组提供了一个unshift()方法,可以在数组前端添加任意个项,并返回数组的长度。因此,同时使用unshift()和pop()方法,可以从相反的方向来模拟队列,即在数组的前端添加项,从数组末端移除项
var colors = new Array();
var count = colors.unshift("red","green");
console.log(count);//2
count = colors.unshift("black");
console.log(count);//3
var item = colors.pop();
console.log(item);//"green"
*重新排序方法
可以直接使用reverse()和sort()来重新排序
reverse()方法会反转数组项的顺序:
var haha = [1,2,3,4,5];
haha.reverse();
console.log(haha);//5,4,3,2,1
sort()方法会按照升序排列数组项,即最小的排在最前面,最大的排在最后面。为了实现排序,sort()方法会调用每个数组项的toString()方法,然后比较得到的字符串,以确定如何排序,即使数组中的每一项都是数值,sort()方法比较的也是字符串,这种方案肯定不好,因此,sort方法可以接收一个比较函数作为参数,以便我们来指定哪个值位于哪个值得前面
//等价于compare1
function compare(value1,value2){
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
//compare1
function compare1(value1,value2){
return value2 - value1;
}
var haha = [3,2,1,10,15];
haha.sort(compare);//升序排列
console.log(haha);//1,2,3,10,15
操作方法
concat()方法基于当前数组的所有项创建一个新数组。即先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有传递参数的情况下,它只是复制当前数组并返回副本。如果传递给concat()方法的是一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。如果传递的不是数组,这些值会直接添加到结果数组的末尾处
var colors = ["red","green","blue"];
var colors2 = colors.concat("yellow",["black","brown"]);
console.log(colors);//red,green,blue
console.log(colors2);//red,green,blue,yellow,black,brown
slice()方法接收一个或两个参数,即要返回的起始和结束位置。在只有一个参数的情况下,slice()方法返回从该参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回起始位置和结束位置之间的项,单包括结束位置的项
var colors = ["red","green","blue","yellow","purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
console.log(colors2);//"green","blue","yellow","purple"
console.log(colors3);//"green","blue","yellow"