Javascript Array的一些用法

<SCRIPT LANGUAGE="JavaScript">
	// 转换方法,一般情况下toString valueOf,toLocaleString返回的值是一样的
	var student = ["小明","小华","小伟"];
	document.write(student.toString()+"</br>");
	document.write(student.valueOf()+"</br>");
	document.write(student.toLocaleString()+"</br>");
	// 如果自定义了toLocaleString的话,返回值可以是不同的,toLocaleString不会调用toString的方法
	var student1 = {
		toLocaleString:function(){
			return "S1的 toLocaleString 自定义方法";
		},
		toString:function(){
			return "Student1";			
		} 
	}
	var student2 = {
		toLocaleString:function(){
			return "S2 的 toLocaleString 自定义方法";
		},
		toString:function(){
			return "Student2";			
		}
	}
	//做下对比
	var students = [student1,student2];
	document.write("---------------------------</br>");
	document.write(students.toString()+"</br>");
	document.write(students.valueOf()+"</br>");
	document.write(students.toLocaleString()+"</br>");

    // join方法,join用特定的分隔符返回数组的字符串
	document.write("JOIN: "+students.join("--")+"</br>");
	// 如果数组最后一项为null或者undefined,最后一项为空字符串
	// 如students = [student1,student2,null]; 
	// 如students = [student1,student2,undefined];
	// join 默认调用toString,如果数组中的项没有toString方法,toString,valueOf,则返回[object Object]字符串,测试可以把student1的toString删除掉,调用下面y一行代码	
	// document.write("JOIN: "+  students[0].toString()+"</br>");


	// 栈方法
	students.push(student1,student2);// 再次向里面添加student1,student2
	var student3 = {
		toString:function(){
			return "我是学生3号";
		}
	}
	var count = students.push(student3);
	document.write("学校的学生数量为:"+count+" </br>");
	students[students.length]=student3;//students.push(student3);都是插入到尾部,只是push返回当期数组的大小,students[students.length]=student3超范围访问自动扩充数组的大小。students.length只比数组的最大索引值大1,所以数组新增一个
	document.write("学校的学生数量为:"+students.length+" </br>");
	// 栈方法主要是push(),pop()方法, push()将对象推入到数组的尾部,并返回插入后的数组大小。
	var item = students.pop();
	document.write("POP() 移除最后一项并返回的最后一项的值为: "+item.toString()+"</br>");
	// 从这里看出POP()方法,删除了最后一项,并返回了移除的项,所以数组还剩下四项元素
	document.write("数组students现在为: "+students.toString()+"</br>");
	// push和pop 的操作可以看出是后进先出,就像一个有底的筒,向里面倒沙子(后进),向外面到沙子(后面进的先倒出来),所以是后进先出,简称last in first out (LIFO)的一种数据结构。栈中项的插入又叫做"推入",移除又叫做弹出。
	
	// 队列方法
	var personX = {
		toString:function(){
			return "我是学生X";
		}
	}
	var snum = students.unshift(personX);// 推入到数组的第一项
	document.write( "学生数量为"+ snum+"</br>"); 
	// unshift 会有一个返回数值,但是在IE中却返回undefined,其他浏览器返回数值.
	var teItem = students.shift();// 获取数组的第一项
	document.write("shift方法 返回"+teItem+"</br>");
	document.write("students 为"+students.toString()+"</br>");
	// shift 返回了第一项,移除了第一项。
	// 队列是一种后进先出的数据结构,first in first out(FIFO),这有点像是产品线,产品一条线的排队过来(unshift),不合格的就拿掉(shift),合格的就保留. 排队有两种一种是直排,进来一个排一个push(),另外一种是特殊的插队unshift(),他永远插在第一个位置。shift总是从最前面移除项。

	// 排序
	// 最常规的翻转
	var values = [0,1,5,10,15];
	values.reverse();
	document.write("reverse后:"+values+"</br>");
	values.sort();
	document.write("sort后: "+values+"</br>");
	values.sort(upCompare);
	document.write("sort参数的升序排序为: "+values+"</br>");
	values.sort(downCompare);
	document.write("sort参数的降序排序为: "+values+"</br>");
	// 结果看到sort排序非常混乱,但是sort可以接收到一个排序参数
	// 升序函数
	function upCompare(values1,values2){
		return values1-values2;
	}
	// 降序函数
	function downCompare(values1,values2){
		return values2-values1;
	}

	// concat用法  12 12 3
	var tempStudents = students.concat();
	// 这里可以看出concat 只是创建了当前数组的一个副本 并返回副本。
	document.write("tempStudents"+ tempStudents+"</br>");
	students = students.concat("学生concat字符串");
	document.write("concat(obj,[toarray])后的数组为: "+students+"</br>");

	var teac = ['teac1','teac2','teac3'];
	var teac2 = teac.concat('teac4',['teac5','teac6']);
	// concat方法接受了两个参数obj和array 可以认为数组先push下obj,然后pushobj中的各个元素。
	document.write(teac2.toString()+"</br>");

	// slice方法
	var teac3 = teac2.slice(1);
	// slice 基于数组创建一个新数组 一个参数从索引处到尾部的所有元素的新数组
	document.write(teac3.toString()+"</br>");
	var teac4 = teac2.slice(1,4);// 取出从第一个到第四个之间的数组(不包含第四个),非索引,这个值比索引大1 
	document.write(teac4.toString()+"</br>");// 
	
	// splice 方法用法 异常强大的方法,大约有三种行为 删除 插入 替换
	var colors = ["col1","col2","red","yellow","green","white","black"];
	var removed  = colors.splice(0,2);
	/*
	对于2个的参数
	第一个参数要删除的的索引位置,第二个参数是要删除的元素个数(索引位置后的元素),如果第二个参数为0,第三个参数没有的话 相当于创建了副本。splice返回了移除的元素。
	*/
	document.write("2个参数的splice返回值为:"+removed+"</br>");
	// 
	document.write(colors+"</br>");

	removed = colors.splice(2,0,"insettColor1","insertColor2");
	/* 对于三个以上的参数
	  第一个参数插入到的索引位置,
	  第二个是索引位置后替换的元素个数
	  第三个以后的参数是要插入的项,可以使一个或者多个 替换 新增 都可以用splice 三个以上的参数(新增的第二个参数为0),而删除用两个参数
	*/ 
	document.write("3个参数的splice返回值为:"+removed+"</br>");
	// 这里第二个参数为0,即删除索引为2后面元素个数为0,没有得到移除项,返回空字符串
	document.write(colors+"</br>");


</SCRIPT>
 

相关推荐