本文转载于javaeye( http://www.javaeye.com/wiki/Object_Oriented_JavaScript/1279-javascript-object-oriented-technology-one),只进行了重新排版以便收藏。
        文中所有英文语句(程序语句除外),都引自<<javascript-the definitive guide,5th edition>>。

------------------------------------------------------------------------------------
数组
        我们已经提到过,对象是无序数据的集合,而数组则是有序数据的集合,数组中的数据(元素)通过索引(从0开始)来访问,数组中的数据可以是任何的数据类型。数组本身仍旧是对象,但是由于数组的很多特性,通常情况下把数组和对象区别开来分别对待(Throughout this book, objects and arrays are often treated as distinct datatypes.  This is a useful and reasonable simplification; you can treat objects and arrays as separate types for most of your JavaScript programming.To fully understand the behavior of objects and arrays, however, you have to know the truth: an array is nothing more than an object with a thin layer of extra functionality. You can see this with the typeof operator: applied to an array value, it returns the string "object".  --section7.5).
        创建数组可以用"[]"操作符,或者是用Array()构造函数来new一个。

1 var  array1  =  [];   // 创建空数组   
2 var  array2  =   new  Array();   // 创建空数组   
3 array1  =  [ 1 , " s " ,[ 3 , 4 ], {"name1":"NAME1"} ];  //    
4 alert(array1[ 2 ][ 1 ]);   // 4   访问数组中的数组元素   
5 alert(array1[ 3 ].name1);  // NAME1 访问数组中的对象   
6 alert(array1[ 8 ]);    // undefined   
7 array2  =  [,,];   // 没有数值填入只有逗号,则对应索引处的元素为undefined   
8 alert(array2.length);  // 3   
9 alert(array2[ 1 ]);      // undefined

        用new Array()来创建数组时,可以指定一个默认的大小,其中的值此时为undefined,以后可以再给他们赋值.但是由于javascript中的数组的长度是可以任意改变的,同时数组中的内容也是可以任意改变的,因此这个初始化的长度实际上对数组没有任何的约束力。对于一个数组,如果对超过它最大长度的索引赋值,则会改变数组的长度,同时会对没有赋值
的索引处赋值undefined,看下面的例子:

1 var  array  =   new  Array( 10 );   
2 alert(array.length);    // 10   
3 alert(array[ 4 ]);        // undefined   
4 array[ 100 =   " 100th " ;   // 这个操作会改变数组的长度,同时将10-99索引对应的值设为undefined   
5 alert(array.length);    // 101   
6 alert(array[ 87 ]);       // undefined  

         可以用delete操作符删除数组的元素,注意这个删除仅仅是将数组在该位置的元素设为undefined,数组的长度并没有改变。我们已经使用过了数组的length属性,length属性是一个可以读/写的属性,也就是说我们可以通过改变数组的length属性来任意的改变数组的长度。如果将length设为小于数组长度的值,则原数组中索引大于length-1的值都会被删除。如果length的值大于原始数组的长度,则在它们之间的值设为undefined。

 1 var  array  =   new  Array( " n1 " , " n2 " , " n3 " , " n4 " , " n5 " );   // 五个元素的数组   
 2 var  astring  =   "" ;   
 3 for ( var  i = 0 ; i < array.length; i ++ {           //循环数组元素   
 4    astring += array[i];   
 5}
   
 6 alert(astring);        // n1n2n3n4n5   
 7 delete  array[ 3 ];                    // 删除数组元素的值   
 8 alert(array.length  +   " _ "   +  array[ 3 ])   // 5_undefined   
 9   
10 array.length  =   3 ;     // 缩减数组的长度   
11 alert(array[ 3 ]);      // undefined   
12 array.length  =   8 ;     // 扩充数组的长度   
13 alert(array[ 4 ]);      // undefined  

        对于数组的其他方法诸如join/reverse等等,在这就不再一一举例。

        通过上面的解释,我们已经知道,对象的属性值是通过属性的名字(字符串类型)来获取,而数组的元素是通过索引(整数型 0~~2**32-1)来得到值。数组本身也是一个对象,所以对象属性的操作也完全适合于数组。

1 var  array  =   new  Array( " no1 " , " no2 " );   
2 array[ " po " =   " props1 " ;   
3 alert(array.length);    // 2   
4 // 对于数组来说,array[0]同array["0"]效果是一样的(?不确定,测试时如此)   
5 alert(array[ 0 +   " _ "   +  array[ " 1 " +   " _ "   +  array.po); // no1_no2_props1