阵列和物件很像(其实阵列也是物件,但这时候说的是使用上相似),都是由一个索引对上一个值,但唯一不同的是,阵列的索引是由零开始的数字,每个数字都会对应一个值,这些值又称为阵列中的元素,而要建立阵列最简单的方式就是使用阵列字面值,如下:
//首先用阵列字面值宣告一个阵列arr//同时在arr的第0,1,2个索引位置中分别指定给他'a','b','c'三个字串元素var arr=['a','b','c'];//读取阵列arr中的所有元素arr; //取得['a','b','c']//用中括号读取第0个索引位置arr[0]; //会得到'a'//也可以重新设定阵列中任何一个元素的值arr[0]='x';//读取阵列arr中的所有元素arr; //取得['x','b','c']
以上是使用阵列字面值来宣告阵列,但在文章一开始有提到阵列其实也是物件,所以他也可以使用「建构器」来宣告阵列,如下:
//用「建构器」宣告一个空阵列arr1var arr1 = new Array(2); //宣告一个阵列,并给他两个位置,但这时候这两个位置的值都是undefined//用建构器宣告一个含有值的阵列var arr1 = new Array('a','b','c'); //效果等同于var arr=['a','b','c'];//但是我们其实会避免使用上述的方式,因为他无法建立值为数字的阵列var arr1 = new Array(2) //这个建构子的结果不会等同var arr1=[2];,而是宣告一个位置为2的空阵列//再来一个例子var arr1 = new Array(3.5) //这个建构子也不会等同var arr1=[3.5];,而是会出现範围错误
当然阵列也有一些方法,如下:
//首先比较特别的是阵列中的length是可以被改变的var arr=['a','b','c'];arr.length; //会回传阵列长度,为3//我们试着改变阵列的长度arr.length = 2; //再一次读取arrarr; //会得到['a','b'],发现在第三个位置的'c'被移除了//如果我们试着增加阵列长度arr.length = 3;//再一次读取arrarr; //会得到['a','b',empty],会在多出来的位置中出现一个空值//试着读取那个空的位置arr[2]; //会取得undefined//接着如果我们要增加索引及值到阵列中可以用push()arr.push('d'); //增加一个'd'到arr中//再读取一次arrarr; //会得到['a','b',empty,'d'],会增加值到新的索引中//接着如果我们想要移除当中的空值,也可以使用splice()arr.splice(2,1); //splice的第一个参数为第几个索引,第二个为从第一个参数开始几个索引长度//读取arrarr; //会得到['a','b','d'];可以发现原本该阵列中的第2个索引已经被移除掉了。//再来如果我们要在该阵列的第1个和第2个索引中增加一个值也可以用splice()arr.splice(2,0,'c'); //我们改了第二个参数为0,因为这个参数代表移除几个长度,如果设0原本的值就不会被影响了,第三个参数为要写入的值。//直接读取arrarr; //会得到['a','b','c','d'];//来运用上面两种splice()的使用方法,若我们要将中间的第一个和第二个索引值取代成1个e字串值arr.splice(1,2,'e');//读取arrarr; //会得到['a','e','d'];,splice(1,2,'e')是指第一、二个参数就是从第1个索引值开始,作用2个长度的範围,第三个参数再增加一个'e'值。
接着讲一个不重要的,因为阵列也是物件,所以他也能拥有「特性」,但他不算阵列的一部份
var arr = ['a','b','c'];//为arr设定一个特性arr.name='arr';arr[name]; //还是能透过物件的方法取得name特性的值'arr'arr; //会取得['a','b','c',name:'arr']//但是当我们去读取第三个索引值时arr[3]; //会回传undefined,因为name是「特性」,并不是阵列中的值
以上如果我有观念错误的地方,还麻烦各位大大指点了,谢谢大家!