或許你會奇怪,物件導向的程式設計為什麼從數組開始講起?這是因為……其間的種種 關係吧……嘿嘿,這裡先賣個關子,先來看看我們熟悉的數組在JavaScript裡面是什麼樣 子的。
1.建立數組
在JavaScript中有很多建立數組的方法。比如使用Array函數。不過 這不是現在我們要講述的。現在我們使用簡單的方括弧“[]”的辦法來建立數組。
var objAyyar = []; // 1
var objAyyar = [2]; // 2
var objAyyar = ["a", "b", "c"]; // 3
var objAyyar = [new Date(), 123, "abc"]; // 4
這裡有四個建立數組的語句。下面來一一解釋一下:
第 一句,建立一個空的數組;
第二句,建立一個數組,數組元素只有一個2;
第三句,建立 一個數組,數組的元素分別初始化為"a", "b", "c";
第四句 ,建立一個數組,其中第一個元素為一個Date類型的對象,第二個元素是數字123,第三個元素是字串 "abc"。
回顧一下,在Java或者C++語言中,數組是具有相同的資料類型的元素的集合 。比如使用Java語言的下面語句
int[] array = new int[10];
將建立一個能放入10個int 類型的元素的數組。數組和其他類型的集合的一個很大的區別是,數組裡面只能存放相同資料類型的元 素(使用泛型的集合除外)。但是,像上面的第四句,JavaScript的數組怎麼能存放不同類型的元素呢? 這是因為,JavaScript是弱類型的語言,沒有很大的資料類型的差別,所以數組的元素可以放入不同的 類型。
2.運算元組
數組是元素的有序集合。數組中的元素是有序的,這就可以通過下標 訪問到數組中的每個元素。而且,JavaScript的數組相當的靈活。當你習慣了Java或者C++的數組之後, 或許並不習慣JavaScript的數組。在一定程度上,這種數組可以稱為一種動態數組。看這樣一段代碼:
var arr = [1, 2, 3, 4, 5];
alert(arr.length); // 數組長度為5
alert (arr[3]); // arr[3] = 4
arr[9] = 10; // 改變了數組的長度為10
alert(arr [7]);
alert(arr.length);
首先建立一個數組arr,可以看到它的長度是5,arr[3] 是4。這些都是很常見的。那麼第三句,arr[9] = 10;就有點意思了——在Java中,這句操作 將導致數組越界的異常,在C++中,這種操作是極其危險的。但是在JavaScript中,這樣的操作是正常的 ——你可以動態改變數組的大小!雖然你在建立數組時並沒有這麼大的長度,但是,你可 以在建立之後指定它!這時的arr.length已經自動的變成 10了。那麼,arr[7]又會是什麼呢?經過運行 代碼我們會看到,arr[7]是undefined。也就是說,雖然arr[9]有了值,但是其中從 arr[5]到arr[8]這 幾個元素都是未定義的,也就是undefined。如果你問JavaScript怎麼不給個初始值?唉,饒了它吧! JavaScript並不知道你想要它初始化成什麼值啊!萬一錯了呢?乾脆還是別了吧 ……
var arr = [1, 2, 3, 4, 5];
alert(arr.length); // 數組長度 為5
delete arr[3]; // 刪掉第4個元素
alert(arr.length); // 長度不變
alert (arr[3]); // arr[3] = undefined
arr.length = 4; // 縮短長度
alert(arr[4]);
arr.length = 10; // 增加長度
alert(arr[6]);
上面的代碼也很有意思:使用 delete操作符可以刪除任意一個數組元素,但是長度並不改變。
Java的數組也有一個length屬性 ,用來顯示數組的長度。JavaScript的數組也有這個屬性。但是,和Java不同的是,後者的 length屬性 並不是唯讀!你可以任意的設定數組的length屬性的值,無論是擴大還是縮小!只是如上面的代碼所 示,改變了length之後,越界的元素或者以前沒有定義的元素都將成為undefined。也就是說,當length 大於原始長度時,從原長度到length - 1的元素都將成為undefined;當length小於原始長度時,從 length到原長度 - 1的元素也都會清除設定為undefined。
3.非數位下標?
如果動態 的length屬性還不夠靈活的話,那麼,JavaScript的數組還有另外的能力。
你見到過用字串做 數組下標的嗎?Java行嗎?C++行嗎?JavaScript就行!看看下面的語句:
var arr = [1, 2, 3];
alert(arr[1] == arr["1"]);
arr["js"] = 4;
alert (arr["js"]);
上面的語句看到,arr[1]和arr["1"]實際是一樣的 效果!這是怎麼回事呢?我們用下面的語句驗證一下:
alert(1 == "1"); // true
alert(1 === "1"); // false
由於JavaScript是弱類型語言,所 以在使用變數的時候,JavaScript會儘可能的將它轉換成所需要的類型。比如數組下面需要數字,那麼 提供一個字串,將會試圖把字串轉換成數字。這裡的"1"就成功的轉換成了數字1,於是 這個語句就成立了。這就是使用 == 操作符返回true的原因。而 === 操作符不允許這樣的類型轉換,所 以會返回false。
那麼,這個arr["js"]怎麼也能成立呢?這就不是上面的問題了。也 就是說,JavaScript實際是允許將字串作為數字下標的。這在JavaScript中是完全合法的。
出 處: http://devbean.blog.51cto.com/448512/163574