--概述

    JS的数组和PHP相似,都是不定长不限制数据类型的(数组的成员可以是不同的数据类型)。

    JS中,只要是批量的数据,都使用数组存储。

    JS的数组都是通过数组序号访问的(类似于PHP中的索引数组),序号从0开始

   

 

数组的作用

    批量的处理数据。

 

数组的声明

 --快速声明方式

  • 1维数组

    var 数组名 = [成员1,成员2,成员3,......];

例如:

 
    
  1. var names = ["张三","李四","王五"]; 
  • 声明数组的数组(2维数组)

例如:

 
    
  1. var arg = [ 
  2.               ["aa","bb"], 
  3.               ["11","22"], 
  4.               ["33","dd"
  5.           ];  //声明了1个2维数组arg,里面包含3个元素,每个元素都是数组 

     如果要输出"22",使用arg[1][1];

 

--使用Array对象声明数组

  • 创建特定值的数组

    var 数组名 = new Array("成员1","成员2",....)

  • 创建空数组

    var 数组名 = new Array(成员个数)

    使用这个能创建个数等于成员个数的空数组。

 

数组的有用属性

--length属性

    返回一个整数值,这个整数比数组中所定义的最高位元素的下标大 1。

说明:

    因为一个数组中的元素并不一定是连续的,所以 length 属性也并不一定就等于数组中的元素个数。例如,在下面的数组定义中,my_array.length 中就包含 7,而不是 2:

 
    
  1. var my_array = new Array( ); 
  2. my_array[0] = "Test"
  3. my_array[6] = "Another Test"

    如果 length 属性被赋予了一个比原先值小的数值,那么数组就被截断,所有数组下标等于或者大于 length 属性的新值的元素都会被丢失。

    如果 length 属性被赋予了一个比原先值大的数值,那么数组就被扩展,且所有新建元素都被赋值为 undefined。

 

 数组的操作

     不管用哪种方式声明的数组,它都是一个对象,可以用数组对象的方法来处理。

--打印数组

    打印函数中直接使用数组名就可以打印整个数组。

例如:

 
    
  1. var arr = [2,3,4,5]; 
  2. document.write(arr);   //就打印出了2,3,4,5 

 

--sort方法

    arrayobj.sort(sortfunction)

    返回一个元素已经进行了排序的 Array 对象。

    参数

    arrayObj:必选项。任意 Array 对象。

    sortFunction:可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。

    说明

    sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。

    如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:

  • 负值,如果所传递的第一个参数比第二个参数
  • 零,如果两个参数相等。
  • 正值,如果第一个参数比第二个参数大。

 

 

 

--关于数组堆栈

    由于JS是弱类型语言,所以JS的数组可以模拟堆栈。

    push,pop方法中,数组末尾被认为是栈顶。

    unshift,shift方法中,数组头部认为是栈顶。

 

 

--push方法

    arrayObj.push([item1 [item2 [. . . [itemN ]]]])

    将新元素添加到一个数组尾,并返回数组的新长度值。

    参数:   
  • arrayObj:必选项。一个 Array 对象。
  • item, item2,. . . itemN:可选项。该 Array 的新元素。

    push 方法将以新元素出现的顺序添加这些元素。如果参数之一为数组,那么该数组将作为单个元素添加到数组中。

 

--pop方法

    arrayObj.pop( )   

    移除数组中的最后一个元素并返回该元素。

    参数:   

    arrayObj:必选的。 arrayObj 引用是一个 Array 对象。

    说明:

    如果该数组为空,那么将返回 undefined

 

--unshift方法

    arrayObj.unshift([item1[, item2 [, . . . [, itemN]]]])   

    将指定的元素插入数组开始位置并返回该数组。 

    参数:

    arrayObj:必选项。一个 Array 对象

    item1, item2,. . .,itemN:可选项。将插入到该 Array 开始部分的元素。

    说明:
    unshift 方法将这些元素插入到一个数组的开始部分,所以这些元素将以参数序列中的次序出现在数组中。

 

--shift方法

    arrayObj.shift( )

    移除数组中的第一个元素并返回该元素。

    参数:   

    arrayObj:必选的。 arrayObj 引用是一个 Array 对象。

    说明:

    shift 方法可移除数组中的第一个元素并返回该元素。

 

--concat方法

    array1.concat([item1[, item2[, . . . [, itemN]]]])   

    返回一个新数组,这个新数组是由两个或更多数组组合而成的。   

    参数:

    array1:必选项。其他所有数组要进行连接的 Array 对象。

    item1,. . ., itemN:可选项。要连接到 array1 末尾的其他项目。

    说明:

    concat 方法返回一个 Array 对象,其中包含了 array1 和提供的任意其他项目的连接。

    要加的项目(item1 … itemN)会按照从左到右的顺序添加到数组。如果某一项为数组,那么添加其内容到 array1 的末尾。如果该项目不是数组,就将其作为单个的数组元素添加到数组的末尾。

以下为从源数组复制元素到结果数组:

  • 如果一个对象引用被从 item1 或 item2 复制到结果中,那么结果中的对象引用仍然指向同一个对象。对该对象的改变将同时反映在两个数组中。
  • 对于连接到新数组的数值或字符串,只复制其值。一个数组中值有改变并不影响另一个数组中的值。
 
    
  1. function ConcatArrayDemo(){ 
  2.    var a, b, c, d; 
  3.    a = new Array(1,2,3); 
  4.    b = "JScript"
  5.    c = new Array(42, "VBScript); 
  6.    d = a.concat(b, c); 
  7.    // 返回数组 [1, 2, 3, "JScript", 42, "VBScript"] 
  8.    return(d); 

 

--join方法

    arrayObj.join(separator)

    返回字符串值,其中包含了连接到一起的数组的所有元素,元素由指定的分隔符分隔开来。

    参数:

    arrayObj:必选项。Array 对象。

    separator:必选项。是一个 String 对象,作为最终的 String 对象中对数组元素之间的分隔符。如果省略了这个参数,那么数组元素之间就用一个逗号来分隔。

    说明:

    如果数组中有元素没有定义或者为 null,将其作为空字符串处理。

    实例:

 
    
  1. function JoinDemo(){ 
  2.    var a, b; 
  3.    a = new Array(0,1,2,3,4); 
  4.    b = a.join("-"); 
  5.    return(b); 
  6. }  //b是个字符串,值是"0-1-2-3-4" 

 

--reverse方法

    arrayObj.reverse( )

    反转一个数组,在执行过程中改变原数组,这个方法并不会创建一个新的 Array 对象。

 

--slice方法

    arrayObj.slice(start, [end])

    返回一个数组的一段。

    参数:

    arrayObj:必选项。一个 Array 对象。

    start:必选项。arrayObj 中所指定的部分的开始元素是从零开始计算的下标。

    end:可选项。arrayObj 中所指定的部分的结束元素是从零开始计算的下标。

    说明

    slice 方法返回一个 Array 对象,其中包含了 arrayObj 的指定部分。

    slice 方法一直复制到 end 所指定的元素,但是不包括该元素。如果 start 为负,将它作为 length + start处理,此处 length 为数组的长度。如果 end 为负,就将它作为 length + end 处理,此处 length 为数组的长度。如果省略 end ,那么 slice 方法将一直复制到 arrayObj 的结尾。如果 end 出现在 start 之前,不复制任何元素到新数组中。

     实例:

 
    
  1. var a, b; 
  2. a = new Array(0,1,2,3,4); 
  3. b = a.slice(0,3);  //b是a数组的从0到2,3个元素 
  4. document.write(b); //将输出0,1,2 

     start,end可以是负值,如果为负值将被加上length。例如:

 
    
  1. var a, b; 
  2. a = new Array(0,1,2,3,4); 
  3. b = a.slice(0, -1); //从0开始,到5+(-1)=4之前(不包括4) 
  4. document.write(b); //可以直接理解为从0一直到最后1个之前