JavaScript引用类型详解——探讨Array类型(创建、访问、检测、转换、栈、队列、重排序、连接)

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


欢迎大家一起讨论,进步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daisy_JuJuJu

你们的鼓励将是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值