陣列可以一次宣告大量的變數,有節省時間、空間的優點。在JavaScript裡,陣列可儲存不同型態的值(包括物件、函式、原始資料類型、其他陣列等),相當方便。
然而,因為JavaScript每個元素的位元長度都不同,執行效能也較低。相較之下,一些只能儲存同型態值的語言(如C語言),雖較不便,但其各元素位元長度都一樣,效能相對較高。
值得注意的是,陣列有其順序性,存取必須透過 [ ] 加上索引值。而索引是從0開始計算的,換言之,以下面為例,想取得第一個城市的內容,就要用 city[0] 來取得。
陣列的建立與物件相同,同樣有兩種作法可用。
傳統作法(以new建立):
let city = new Array();
city[0] = “Taipei”
city[1] = “Taichung”
city[2] = “Kaohsiung”
實務作法1:陣列實字(array literal)
let city = [];
city[0] = “Taipei”
city[1] = “Taichung”
city[2] = “Kaohsiung”
實務作法2
let city = [“Taipei”, “Taichung”, “Kaohsiung”];
在前例中,若我們用length屬性取得陣列內容長度,會發現都是3(因為都塞入了3個內容)。
city.length; //印出3
視實際用途,陣列的長度可以透過指定,隨時增減。以前例為例,我們可以跳號指定第9個城市。
被跳過的陣列索引,因為沒指定值給它(們),自然就是 undefined了。
//前段略
city[8] = “Keelung”;
//接著印出陣列全部內容
console.log(city); //會印出 [“Taipei”, “Taichung”, “Kaohsiung”, undefined, undefined, undefined, undefined, undefined, “Keelung”]
在前前例中,若想在「陣列末端」追加一個城市,可以運用push()方法:
let city = [“Taipei”, “Taichung”, “Kaohsiung”];
city.push(“Tainan”);
console.log(city); //會印出[“Taipei”, “Taichung”, “Kaohsiung”, “Tainan”]
同在此例,若想直接以「新北市」代換「台北市」的名稱(原地變更陣列中的值),可以用以 = 指定之:
let city = [“Taipei”, “Taichung”, “Kaohsiung”];
city[0] = “New Taipei”
console.log(city); //會印出[“New Taipei”, “Taichung”, “Kaohsiung”]
此外,尚有可在陣列中間插入元素的splice() 方法、刪除頭/尾的pop() 方法與shift() 方法等。
詳情可參閱MDN手冊如下:
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/pop
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
在JavaScript,若要檢查一個值的型別,可以用typeof運算子。前文我們已曾運用一次。然而,若我們直接以typeof去檢查陣列,由於歷史遺留問題,回傳的會是物件(object),而非陣列。如:
typeof []; // 回傳“object”
為了判斷一個值/變數究竟是物件?還是陣列?現行的JavaScript已有解方。我們可運用isArray() 方法解決此問題。
city.isArray([]); // true 是陣列
city.isArray([“Taipei”]); // true 是陣列
city.isArray(); // false 不是陣列
city.isArray(null); // false 不是陣列