Array类型绝对是JavaScript中又一极其重要的引用类型,其具有的属性和方法具有较大的灵活性以及便捷性。
1.创建数组的两种方式
(1)使用new关键字构造(可以省略new关键字)
var animals = new Array();
var animals = new Array(20); //长度为20的数组
var animals = new Array("dog","cat","pig"); //包含数组选项
(2)使用对象字面量
var animals =["dog","pig","cat"];
var animals = []; // 空数组
var animals = ["dog","pig",]; //不要这样做,会创建包含2或3项的数组
2. 访问数组
使用下标索引的方式访问
var animals =["dog","pig","cat"];
console.log(animals[0]); //"dog"
console.log(animals[2]); //"cat"
console.log(animals.length);
//3,数组的长度保存在属性length中,0或大于0
animals[1] = "pegiumn"; //修改第二项
animals[3] = "pandas"; //新增第四项
console.log(animals.length); // 4
注:如果将length属性的值设为大于现有数组的长度,则新增的每一项将会取得undefined的值,如果将length属性的值设为小于现有数组的长度,则会将长度后的数据项删除,这时候如果访问将会得到undefined。
数组的最后一项是length-1,新项的位置时length
3. 检测数组
可以使用 instanceof 检测数组
console.log(animals instancesof Array); //true
//方式一
if(animals instanceof Array){
//do Something
}
//方式二
if(Array.isArray(animals){
//do Something
}
instanceof操作符的问题在于它假定只有一个全局执行环境。
如果网页中包含多个框架,实际上就包含两个以上的全局执行环境,从而存在两个及以上版本的Array构造函数。这样在参数传递数组时,就会出错。
所以可以使用方式二解决这个问题。
4.转换方法
所有的对象均拥有toString(),toLocalString,valueof()方法
toString():调用返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。实际上这个字符串会调用数组每一项的toString()方法。
valueof():返回数组本身
toLocalString():返回与前两个方法相同的值。当调用数组的toLocalString()方法时,会创建一个数组值的以逗号分隔的字符串,实际上这个字符串会调用数组每一项的toLocalString()方法。
例如:
var person1 = {
toLocalString:function(){
return "Pengju"
};
toString:function(){
return "Daisy";
}
};
var person2 = {
toLocalString:function(){
return "Liweixia";
},
toString:function(){
return "Bella";
}
};
var people = [person1,person2];
console.log(people); //Daisy,Bella
console.log(people.toString()); //Daisy,Bella
console.log(people.toLocalString()); //Pengju,Liweixia
toString()和toLocalString()方法返回的字符串以逗号拼接,我们可以使用join()方法以任意符号拼接,如:
var animals = ["pig","dog","cat"];
console.log(animals.join(","); //pig,dog,cat
console.log(animals.join("。"); //pig。dog。cat
5.数组的栈方法:和数据结构相同(先进后出)
(1)入栈 push
var animals = ["pig"];
animals.push("dog"); //入栈
console.log(animals.toString()); //pig,dog
(2)出栈 pop
var animals = ["pig"];
animals.push("dog”,"cat"); //入栈
console.log(animals.toString()); //pig,dog,cat
//出栈
animals.pop();
console.log(animals.toString()); //pig,dog;
//取得最后一项
var animal = animals.pop();
console.log(animal); //dog
console.log(animals.toString()); // pig
6.数组的队列方法:和数据结构一样(先进先出)
(1)入队 unshift()
var animals = [];
var count = animals.unshift("dog,"pig","cat");
console.log(count); //3
console.log(animals.toString()); //dog,pig,cat
(2)出队 shift()
var animal = animals.shift();
console.log(animal); //dog
console.log(animals.toString()); //pig,cat
7.重排序方法
(1)reverse():反转数组的数据项
var num = [1,2,3,4,5];
num.reverse();
console.log(num); // 5,4,3,2,1
(2)sort():按照升序排序数组,但是比较的是数组项的字符串(先调用数组项的toString()方法,在进行比较)
var num = [1,2,10,14,5];
num.sort();
console.log(num); //1,10,14,2,5
很明显这并不是我们想要的结果,因此sort()函数可以接收一个比较函数
//升序
function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
}
var num = [1,2,10,5,14];
num.sort(compare);
console.log(num); //1,2,5,10,14
//降序
function compare(value1,value2){
if(value1<value2){
return 1;
}else if(value1>value2){
return -1;
}else{
return 0;
}
}
var num = [1,2,5,10,14];
num.sort(compare);
console.log(num); //14,10,5,2,1
8.操作方法
(1)连接:concat()基于当前数组中的所有项新创建一个数组。如果传递给concat() 方法的是一个或多个数组,则会将这些数组中的每一项都添加到结果数组中。如果值不是数组,这些值就会被简单地添加到结果数组的末尾。
var colors1 = ["red","green","blue"];
var colors2 = colors1.concat("yellow",["black","white"]);
console.log(colors1); //red,green,blue
console.log(colors2.toString()); //red,green,blue,yellow,black,white
欢迎大家一起讨论,进步!!!