數組
我們已經提到過,對象是無序資料的集合,而數組則是有序資料的集合,數組中的資料(元素)通過索引(從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一個.
Js代碼
- var array1 = []; //建立空數組
- var array2 = new Array(); //建立空數組
- array1 = [1,"s",[3,4],{"name1":"NAME1"}]; //
- alert(array1[2][1]); //4 訪問數組中的數組元素
- alert(array1[3].name1); //NAME1 訪問數組中的對象
- alert(array1[8]); //undefined
- array2 = [,,]; //沒有數值填入只有逗號,則對應索引處的元素為undefined
- alert(array2.length); //3
- alert(array2[1]); //undefined
var array1 = []; //建立空數組var array2 = new Array(); //建立空數組array1 = [1,"s",[3,4],{"name1":"NAME1"}]; //alert(array1[2][1]); //4 訪問數組中的數組元素alert(array1[3].name1); //NAME1 訪問數組中的對象alert(array1[8]); //undefinedarray2 = [,,]; //沒有數值填入只有逗號,則對應索引處的元素為undefinedalert(array2.length); //3alert(array2[1]); //undefined
用new Array()來建立數組時,可以指定一個預設的大小,其中的值此時為undefined,以後可以再給他們賦值.但是由於
javascript中的數組的長度是可以任意改變的,同時數組中的內容也是可以任意改變的,因此這個初始化的長度實際上
對數組沒有任何的約束力.對於一個數組,如果對超過它最大長度的索引賦值,則會改變數組的長度,同時會對沒有賦值
的索引處賦值undefined,看下面的例子.
Js代碼
- var array = new Array(10);
- alert(array.length); //10
- alert(array[4]); //undefined
- array[100] = "100th"; //這個操作會改變數組的長度,同時將10-99索引對應的值設為undefined
- alert(array.length); //101
- alert(array[87]); //undefined
var array = new Array(10);alert(array.length); //10alert(array[4]); //undefinedarray[100] = "100th"; //這個操作會改變數組的長度,同時將10-99索引對應的值設為undefinedalert(array.length); //101alert(array[87]); //undefined
可以用delete操作符刪除數組的元素,注意這個刪除僅僅是將數組在該位置的元素設為undefined,數組的長度並沒有改變.
我們已經使用過了數組的length屬性,length屬性是一個可以讀/寫的屬性,也就是說我們可以通過改變數組的length屬性來
任意的改變數組的長度.如果將length設為小於數組長度的值,則原數組中索引大於length-1的值都會被刪除.如果length
的值大於原始數組的長度,則在它們之間的值設為undefined.
Js代碼
- var array = new Array("n1","n2","n3","n4","n5"); //五個元素的數組
- var astring = "";
- for(var i=0; i<array.length; i++) { //迴圈數組元素
- astring += array[i];
- }
- alert(astring); //n1n2n3n4n5
- delete array[3]; //刪除數組元素的值
- alert(array.length + "_" + array[3]) //5_undefined
-
- array.length = 3; //縮減數組的長度
- alert(array[3]); //undefined
- array.length = 8; //擴充數組的長度
- alert(array[4]); //undefined
var array = new Array("n1","n2","n3","n4","n5"); //五個元素的數組var astring = "";for(var i=0; i<array.length; i++) { //迴圈數組元素 astring += array[i];}alert(astring); //n1n2n3n4n5delete array[3]; //刪除數組元素的值alert(array.length + "_" + array[3]) //5_undefinedarray.length = 3; //縮減數組的長度alert(array[3]); //undefinedarray.length = 8; //擴充數組的長度alert(array[4]); //undefined
對於數組的其他方法諸如join/reverse等等,在這就不再一一舉例.
通過上面的解釋,我們已經知道,對象的屬性值是通過屬性的名字(字串類型)來擷取,而數組的元素是通過索
引(整數型 0~~2**32-1)來得到值.數組本身也是一個對象,所以對象屬性的操作也完全適合於數組.
Js代碼
- var array = new Array("no1","no2");
- array["po"] = "props1";
- alert(array.length); //2
- //對於數組來說,array[0]同array["0"]效果是一樣的(?不確定,測試時如此)
- alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1
數組也是對象,所以數組可以有自己的屬性,但是屬性和值不是一個概念,"no1"和"no2"都是數組的值,而array["po"]是給數組添加了一個屬性,其長度當然就沒變了。