《javascript语言精粹》——第6章数组
【1】、数组字面量
  var empty=[];
  var num=[
    'zero','one','two','three','four','five','six','seven','eight','nine'
  ];
document.write("<br/>"+empty[0]);undefined
document.write("<br/>"+num[0]);//zero
document.write("<br/>"+num.length+"<br/>"+empty.length);10,0
  var misc=['string',true,[0,1],{object:true},NaN,null,undefined];//数组中可以是任意混合类型的值
  document.write("<br/>"+misc.length);//7
【2】、长度
  var myArr=[];
  myArr.length;
  document.write("<br/>"+myArr.length);
  myArr[9999]=true;
  document.write("<br/>"+myArr.length);//10000  数组最大整数属性名+1,并不一定等于数组中的属性个数
  num.length=3;
  num[num.length]='shi';
  num.push("go");//添加到数组中
  document.write("<br/>"+num);//zero,one,two,shi,go
【3】、删除
  delete num[2];
  document.write("<br/>"+num);//zero,one,,shi,go
  num.splice(2,2);//第一个参数是数组中的序号也就是下标,从0开始数,第二个参数就是要删除的元素的个数
  document.write("<br/>"+num);//zero,one,go  ,对于大型的数组,效率不高,因为被删除的属性后面的每个属性都要被溢出,并且以一个新的键值重新插入
【4】、枚举:就是能够通过for 循环遍历出来
【5】、混淆的地方
数组跟对象的使用尝尝会弄混,所以,写了一个判断是否为数组的方法:
  var is_array=function(value){
	    return value&&
		    typeof value=='object'&&
		    typeof value.length=='number'&&
		    typeof value.splice=='function'&&
		    !(value.propertyIsEnumerable('length'));  //length能够通过for in循环遍历出来,对于所有数组来说,返回的都是false
  };
【6】、方法
  Array.method("reduce",function(f,value){
	    var i;
	    for(i=0;i<this.length;i++)
	    {
		      value=f(this[i],value);//value是个临时变量,用来临时保存最后相加的值,然后在跟后面一个值相加
	    }
	    return value;
  });
  var data=[4,8,15,16,23,42];
  var addNum=function(a,b){
	    return a+b;
  };
  var mult=function(a,b){
	    return a*b;
  };
var sum=data.reduce(add,0);
var product=data.reduce(mult,1); document.write("<br/>相加:"+sum+"<br/>相乘:"+product);//相加:108 相乘:7418880
  
  data.total=function(){ //数组是对象,所以,可以给一个单独的数组添加方法
	    return this.reduce(add,0);
  };
document.write("<br/>"+data.total());//108
【7】、维度
   //一维数组
  Array.dim=function(a,b){
	    var c=[],i;
	    for(i=0;i<a;i++){
		      a[i]=b;
	    }
  };
var arr1=Array.dim(10,0);
  //二维数组或者是数组的数组
  var maxrix=[
    [0,1,2],
    [3,4,5],
    [6,7,8]
  ];
  document.write("<br/>"+maxrix[2][2]);//8
  Array.maxrid=function(m,n,inital){
	    var a,i,j,mat=[];
	    for(i=0;i<m;i++)
	    {
		      a=[];
		      for(j=0;j<n;j++){
			        a[j]=0;
		      }
		      mat[i]=a;
	    }
	    return mat;
  };
  var myMaxrix=Array.maxrid(4,4,0);
  document.write("<br/>"+myMaxrix[3][3]);//0
  Array.identity=function(n){//恒等矩形
	  var i,mat=Array.maxrid(n,n,0);
	    for(i=0;i<n;i++){
		      mat[i][i]=2;
	    }
	    return mat;
  };
document.write("<br/>"+Array.identity(4)[3][3]);//2
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号