5.数组
方便操作多元素的容器,可以对其中的元素进行编号。
特点:可以存任意元素,长度是可变的。
格式:
var arr = new Array(); arr[0] = “hello”; arr[1] = 123; var arr = [‘hello’,123,true,”abc”];
通过遍历即可对数组进行基本操作。
for(var x=0; x<arr.length; x++) { alert(arr[x]); }
代码演示:
<html> <head> <title>javascript数组用法演示</title> </head> <body> <script type="text/javascript"> //数组定义的方式1: 定义时直接赋初值 var arr =[12,34,2,-3,90,12]; document.write( typeof(arr) ); //object document.write("<br/>"); document.write("len:" + arr.length); document.write("<br/>"); //遍历数组 for(var x=0;x<arr.length;x++){ document.write("arr["+x+"]="+ arr[x]+" "); } document.write("<br/>"); arr[0]=-10; arr[7]=66;//数组可以自动增长,且arr[6]没有赋值则是undefined document.write("len:"+arr.length+" 数组长度自动加长"); document.write("<br/>"); for(var x=0;x<arr.length;x++){ document.write("arr["+x+"]="+ arr[x]+" "); } document.write("<br/>"); document.write("<hr/>"); var arr2=[]; document.write("arr2.length="+arr2.length);//0 document.write("<br/>"); arr2[1]=10; for(var x=0;x<arr2.length;x++){ document.write("arr2["+x+"]="+ arr2[x]+" "); } document.write("<br/>"); //※※错误的声明方式--数组 //int[] arr3 ={1,2,3}; //var[] arr3 = [1,2,3];//错的,[]代表的是数组类型,而js中,所有数据类型只有一个var声明,不存在“var[]”这种类型 document.write("同一个数组的元素可以是不同类型!!!<br/>"); var arr4=[1,2,3,100]; arr4[0]="abc"; arr4[1]=true; for(var x=0;x<arr4.length;x++){ document.write("arr4["+x+"]="+ arr4[x]+" "); } document.write("<br/>"); //※※综上,js数组的两个特点: //1,长度是可变的 //2,元素的类型是任意的 </script> <hr/> <script type="text/javascript"> //数组定义的方式2: 使用js中的Array对象来定义 var arr10 = new Array(); //※ 空参 for(var x=0;x<arr10.length;x++){ document.write("arr10["+x+"]="+ arr10[x]+" "); }//什么都没有,因为长度是0 document.write("arr10.length="+arr10.length);//0 document.write("<br/>"); var arr11 = new Array(8); //※ 一个参数,代表的是数组的长度 arr11[2]=12; arr11[3]="abc"; for(var x=0;x<arr11.length;x++){ if(x==2||x==3){ document.write("<font color=red >arr11["+x+"]="+ arr11[x]+" </font>"); }else{ document.write("arr11["+x+"]="+ arr11[x]+" "); } } document.write("<br/>"); var arr12 = new Array(10,11,12); //※ 多个参数,代表的是数组元素值 arr12[5]="aaa"; for(var x=0;x<arr12.length;x++){ document.write("arr12["+x+"]="+ arr12[x]+" "); } document.write("<br/>"); </script> </body> </html>
360浏览器8.1 演示结果:
接下来将函数和数组结合起来用用,写个排序和二分查找。
<html> <head> <title>javascript数组与函数练习</title> </head> <body> <script type="text/javascript"> //写一个获取数组中元素最大值的函数 //若有多个,返回第一个 function getMax(arr){ var max=0;//最大值的下标 for(var x=1;x<arr.length;x++){ if(arr[x]>arr[max]){ max = x; } } return arr[max]; } //调用 var arr=[23,-3,45,0,-100,47,22]; var v = getMax(arr); document.write("数组最大值的下标:"+v); document.write("<br/>"); document.write("数组最大值:"+v); document.write("<br/>"); //数组选择排序 function sortArray(arr){ for(var x=0;x<arr.length-1;x++){ var min=x; for( var y=x+1;y<arr.length;y++){ if(arr[min]>arr[y]){ min=y; } } if(min!=x){ swap(arr,x,min); } } } function swap(arr,x,y){ var temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } document.write("<hr/>"); document.write("排序前:"+arr+"<br/>"); sortArray(arr); document.write("排序后:"+arr+"<br/>"); //我们的输出函数---把内容输出到页面且换行 function println(str){ document.write(str+"<br/>"); } println(arr); sortArray(arr); println(arr); //到数组当中查找元素 function searchElement(arr,key){ for(var x=0;x<arr.length;x++){ if(arr[x]==key){ return x; } } return -1; } println( searchElement(arr,0) ); println( searchElement(arr,123) ); </script> <script type="text/javascript"> //二分查找 function binarySearch(arr,key){ var max,min,mid; min=0; max=arr.length-1; while(min<=max){ mid = (max+min)>>1; if(key>arr[mid]){//落在右边 min = mid+1; }else if(key<arr[mid]){//落在左边 max = mid-1; }else{ return mid; } } return -1; } println("二分查找结果:"); println( binarySearch(arr,0) ); println( binarySearch(arr,123) ); //数组反转 function reverseArray(arr){ for(var start=0,end=arr.length-1; start<end; start++,end--){ swap(arr,start,end); } } reverseArray(arr); println("反转之后:"+arr); </script> </body> </html>
360浏览器8.1 演示结果:
JS中的全局变量和局部变量解答:
代码演示:
<html> <head> <title>javascript中的全局变量与局部变量</title> </head> <body> <!-- 全局变量: js中,直接在脚本当中定义的变量全都是全局变量。 局部变量: 在函数中定义的变量是局部的。 --> <script type="text/javascript"> function println(str){ document.write(str+"<br/>"); } var a=100; println("遍历输出0-9:"); for(var x=0;x<10;x++){ println("x="+x); } </script> <script type="text/javascript"> println("aaaa="+a); println("xxxx="+x); function aa(){ var y=123; document.write("y="+y); return; } aa(); document.write("<br/>"); println("yyyy="+y);//不能访问函数内部定义的变量,因为它是局部的 </script> <!-- 一点小细节 --> <script type="text/javascript"> var n=3;//全局变量n function abc(n){//局部变量n---形参是方法内部声明的局部变量,值由arguments[0]在使用n时临时赋给它的 n=6; } abc(n);//把x传给方法abc,并在其中试图对该值进行更改--未遂!----本质上实参n是把值传给了函数中的arguments数组了 println("n="+n); </script> </body> </html>
360浏览器8.1 演示结果:
下一次就学习JS的对象了。毕竟JS是基于对象的语言。