JavaScript数组(Array 类)详解

 

对象的类型:


     ECMA-262把本地对象(native object) 定义为“独立于宿主环境的ECMAScript实现提供的对象。“简单的说了,本地对象就是
ECMA-262定义的的类(引用类型)。它们包括:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、
EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError。

1.Array类


   
于Java不同的是,在ECMAScript中有真正的Array类。可以如下创建Array对象:如果预先知道数组中项的个数,可以用参数传
递数组的大小:
    var aValues = new Array(20);
    使用这两个方法,一定要使用括号,与它们在Java中的方法用法相似:
    1) var aColors = new Array();
    aColors[0] = "red";
    aColors[1] = "green";
    aColors[2] = "blue";
    这里创建了一个数组,并定义了三个数组项,即"red"、"green"、和"blue"。每增加一个数组项,数组的大小就动态地增长。
    此外,如果知道数组应该存放的值,还可用参数声明这些值,创建大小与参数个数相等的Array对象。例如:
    2) var aColors = new Array( "red", "green", "blue");
    前面提过,数组可以根据需要增大或减小。因此,如果要为前面定义的数组增加一项,只需把要存放的值放入下一个使用的位
置即可。
    var aColors = new Array( "red", "green", "blue");
    aColors[3] = "purple"; 
    数组的大小将由原来的3自动增长为4,但如果把值放到在这个数组的位置10处,ECMAScript将把3开始到9的所有位置都填上值null,
然后在位置10处放上正确的值,并把数组的大小增大为11:
    var aColors = new Array( "red", "green", "blue");
    aColors[10] = "purple";
    注:数组最多可以存放4294967295项,这应该可满足大多数程序设计的需要。如果要添加更多项,则会发生异常。
    还可以用字量表示定义Array对象,即使用方括号([和]),用逗号分隔值。例如:
    3) var aColors = ["red", "green", "blue"];
    注:在这个例子中,未明确使用Array类,方括号暗示把其中的值存放在Array对象中,用这种方式声明的数组与用传统方式声明的数
组相同。
    Array对象覆盖了toString()方法和valueOf()方法,返回特殊的字符串。该字符串是通过对每项调用toString()方法,然后用逗号把
它们连接在一起构成的。例如,对具有项"red"、"green"、"blue"的数组调用toString()方法或valueOf(),返回的字符串"red、green、blues"。
    var aColors = ["red", "green", "blue"];
    alert(aColors.toString())   //outputs "red,green,blue"
    类似的,toLocaleString()方法返回的也是有数组项构成的字符串。唯一的区别是得到的值是通过调用每个数组项的toLocaleString()
方法得到的。许多情况下,该方法返回的值都与toString()方法返回的值相同,也是用逗号连接字符串。
    var aColors = ["red", "green", "blue"];
    alert(aColors.toLocaleString())   //outputs "red,green,blue" 
    由于开发者也可能希望在数组之外创建这样的值,所有ECMAScript提供了方法join(),它唯一的用途就是连接字符串值。join()方法
只有一个参数,即数组项之间使用的字符串。考虑下面的例子。
    var aColors = ["red", "green", "blue"];
    alert(aColors.join(","))   //outputs "red,green,blue"
    alert(aColors.join("]["))   //outputs "red][green][blue"
    这里使用方法join()创建了不同的数组表示。第一个join()方法使用逗号,本质上与调用toString()方法或valueOf()方法等价。第二个
join()方法使用][字符串。理解的重点在于任何字符串都可以用在分隔符。
    既然Array具有把自己转换成字符串的方法,那么String当然也可以转换成Array。String类的方法split()正用于此。split()方法只有一
个参数。该参数就是被看作数组项之间的分隔符的字符串。因此,如果有一个逗号分割的字符串,就可以用下面的大门把它转换成Array对象:
    4) var sColors = "red,green,blue";
    var  aColors = sColors.split(",");
    Array对象具有两个String类就有的方法,即concat()和slice()方法。concat()方法处理数组的方式几乎与它处理字符串的方式完全一样。
参数被附加在数组的末尾,返回的函数值是新的Array对象(包括原始数组中的项和新的项)。例如:
    var aColors = ["red", "green", "blue"];
    var aColors1 = aColors.concat("yellow,"purple");
    alert(aColors1.toString());   //outputs "red,green,blue,yellow,purple"
    slice()方法也于String类中的slice()方法非常类似,返回的具有特定项的数组。类似于String类的方法,Array类的slice()方法也接受
一个或两个参数,即要提取的项的起始位置和结束位置。如果只有一个参数,该方法将返回从该位置开始到数组结尾的所有项;如果有两个参
数,该方法将返回第一个位置和第二个位置间的所有项,不包括第二个位置处的项。例如:
    var aColors = ["red", "green", "blue", "yellow", "purple"];   
    var aColors1 = aColors.slice(2);
    var aColors2 = aColors.slice(2,4);
    alert(aColors1.toString())  //outputs "blue,yellow,purple"
    alert(aColors2.toString())  //outputs "blue,yellow"
    ECMAScript的Array类的一个有趣之处是它提供的方法是数组的行为与其他数组类型的行为相似。例如:Array对象的动作就像一个栈。所谓
栈,就是一种限制了插入和删除数组项操作的数据结构。栈又叫做后进先出(LIFO)结构,意思是最近添加的项是最先删除的项。栈中的插入和删
除操作都只发生在一个位置,即栈顶部。
    为更便利地使用这种功能,Array对象提供了两个方法push()和pop()。如你所料,push()方法用于在Array结尾添加一个或多个项,pop()方
法用于删除最后一个数组项(length-1),返回它作为函数值。考虑下面的例子:
    var stack = new Array;
    stack.push("red");
    stack.push("green");
    stack.push("blue");
    alert(stack.toString());  //outputs "red,green,blue"
    var item = stack.pop();
    alert(item);              //outputs "blue"
    alert(stack.toString());  //outputs "red,green"
    Array还提供了操作第一项的方法。方法shift()将删除数组中的第一项,将其作为函数值的返回值。另有一个方法是unshift()方法。他把一个
项放在数组的第一个位置,然后把余下的项项下移动一个位置。例如:
    var aColors = ["red", "green", "blue"];
    var item = aColors.shift();
    alert(aColors.toString());  //outputs "green,blue"
    alert(item);                //outputs "red"
    aColors.unshift("black");  
    alert(aColors.toString());  //outputs "black,green,blue"
    通过调用shift()和push()方法,可以使Array对象具有队列一样的行为,所谓队列(queue)是对元素的插入和删除操作具有限制的数据结构的一员。
队列又叫做后进后出(LILO)结构,意思是最近加入的元素最后删除。元素的插入操作只发生在队列的尾部而删除操作则发生在队列的头部。
    把队列想象成电影院内所排的队伍。当新人到达,要买票时,他们需要走到队伍的尾部。这种操作传统上叫做put或入队(enqueue)。
    他们将等待,直到移动到队伍的开头(在次买票)为止。完成购买后,人们将离开队伍的开头,进入电影院。这种操作传统上叫做get
或出队(dequeue)。
    用push()方法把数据项加入队列(即在数组结尾添加数据项),然后用shift()方法把它从队列中删除:
     var queue = ["red", "green", "blue"];
     queue.push("black");
     alert(queue.toString())   //outputs  "red,green,blue,black"
     var item = queue.shift();
     alert(item)               //outputs "red”
     alert(queue.toString());  //outputs "green,blue,black"
     用两种与数组项的顺序有关的方法,即reverse()和sort()方法。如你所料,reverse()方法颠倒数组项的顺序。sort()方法将根据数组项的
值按升序为它们排序。要进行这种排序,首先调用toString()方法,将所有值转换成字符串,然后根据字符代码比较数组项。    
     var aColors = ["red", "green", "blue"];
     aColors.reverse();
     alert(aColors.toString());    //outputs "blue,green,red"
     aColors.sort();
      var aColors1 = ["red", "green", "blue","yellow"];
     alert(aColors1.toString());    //outputs "blue,green,red,yellow"
     由字母组成的字符串是按照字母的顺序进行排序的,所有的值都是字符串,是符合逻辑的。不过值是数组,结果就不一定了。例如:
     var aColors = [3,32,2,5];
     aColors.sort();
     alert(aColors.toString())  //outputs  "2,3,32,5"
     这是因为数字被转换成字符串,然后再按照字符代码进行比较的。
     最复杂的方法是splice()。这种方法的作用非常简单。只是把数据项插入数组的中部。
     删除————只需要声明两个参数,就可以从数组中删除任意多个项,这两个参数是要删除的第一个项的位置和要删除的项的个数。例如:
arr.splice(0,2)将删除数组arr中的前两项。
     替换而不删除————声明三个参数就可以把数据项插入指定的位置,这三个参数是起始位置、0(要删除的数组项的个数)和要插入的项。
此外,还可以用第四、第五个或更多个参数指定其他要删除的项。例如,arr.splice(2,0,"red","green")将在位置2处插入“red”,“green”。
     替换并删除————声明三个参数就可以把数据项插入指定的位置,这三个参数是起始位置、要删除的数据项的个数以及要插入的项。此外,
还可以指定要插入的更多的项。要插入的项的个数不必等于要删除的项个数。例如,arr.splice(2,1,"red","green")将删除数组arr中位置2
处的项,然后在位置2处插入“red”和“green”。
   
   
   
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值