JavaScript陣列、函式與事件

陣列

陣列是將多個變數結合在一起,每個陣列元素皆可視為變數使用,陣列佔有連續的記憶體空間,陣列提供索引值(index)存取陣列中個別元素,JavaScript語言規定陣列的第一個元素其索引值為0,第二個元素其索引值為1,依此類推,一個陣列擁有n個元素,若要存取陣列最後一個元素,需設定索引值為n-1,由此可知,每個索引值對應一個陣列元素,因此我們只要指定陣列與索引值就可存取陣列中指定的元素。

最常見的陣列就是一維陣列,一維陣列表示只要使用一個索引值就可以存取陣列的元素,一維陣列佔有連續的記憶體空間,一維陣列相當於同一條路上的房子,只要指定這條路的門牌號碼,就可以將信寄到這條路上的收件者,一維陣列也一樣,只要指定陣列名稱相當於地址的路名,而陣列索引值相當於地址的門牌號碼,指定陣列名稱與索引值就可以存取到一維陣列中的元素。

一維陣列的初始化

程式中使用陣列可以事先初始化,初始化為指定陣列每個元素的值,以下就介紹初始化的語法。

我們來看看上述程式範例陣列A的記憶體狀態,如下圖。

陣列與迴圈

利用迴圈變數與陣列索引值結合,經由控制陣列索引值可以存取陣列中所有元素,以下為迴圈變數與陣列索引值結合範例。

使用A[i]存取陣列中元素,使用迴圈控制i的變化,當i等於0,A[i]就會存取陣列A的第一個元素;當i等於1,A[i]就會存取陣列A的第二個元素;當i等於2,A[i]就會存取陣列A的第三個元素,依此類推,就可以存取到陣列所有元素,這就是陣列與迴圈結合可以存取到陣列中所有元素的概念。

陣列的操作函式

使用push函式可以將元素加到陣列最後,使用pop函式可以將陣列最後一個元素刪除,屬性length可以回傳陣列的長度。

本單元範例程式碼如下。

本單元範例程式碼預覽結果如下。

函式

函式用於結構化程式,將相同功能的程式獨立出來,經由函式的呼叫,傳入資料與回傳處理後的結果,程式設計師只要將函式寫好,可以不斷利用此函式做相同動作,可以達成程式碼不重複,要修改此功能,只要更改此函式。再者,其他程式設計師要使用此函式,只要知道此函式的功能,什麼輸入會有怎樣對應的輸出,不需知道函式實作的細節,函式可幫助多位程式設計師共同開發系統,事先規劃好函式名稱與功能,再各自開發函式與整合所有程式,最後達成系統所需求的功能。

函式的定義與呼叫

自訂函式需要包含兩個部分,分別是函式的定義與函式的呼叫。函式的定義是實作函式的功能,輸入參數與回傳處理後的結果,利用函式的呼叫讓函式真正執行,以下分開敘述。

函式的定義

以下為函式的定義,函式名稱後接著一對小括號,小括號可以填入要傳入函式的參數,當參數有多個的時候以逗號隔開,函式的範圍為函式名稱後使用一對大括號所包夾起來的範圍,當函式需要傳回值使用指令return,表示程式執行的控制權由函式轉換為原呼叫函式,函式的定義與傳回值格式,如下表。

函式的呼叫

程式經由函式呼叫,將資料傳入函式,函式處理後傳回結果給呼叫程式,程式中如何呼叫函式?

方法一:無傳回值的呼叫語法

函式名稱(參數值1,參數值2,…)

說明:利用函式名稱與參數來呼叫函式。

方法二:有傳回值的呼叫語法

變數=函式名稱(參數值1,參數值2,…)

說明:等號右邊要先做完,利用函式名稱與參數來呼叫函式,最後函式回傳值給變數,變數就紀錄函式呼叫後的回傳值。

以下範例自訂函式add將三個數字相加,呼叫函式add回傳計算結果。

本單元範例程式碼如下。

本單元範例程式碼預覽結果如下。

事件

事件是使用者與程式互動介面,例如:按下按鈕、點選滑鼠、按下按鍵等都會驅動事件,當發生此事件就會呼叫對應的事件進行處理,該事件內可允許使用者撰寫對應的事件處理程式,經由執行對應的事件處理程式達成所需的功能。

事件處理函式

撰寫事件處理函式的三種方式,如下,以按鈕點選為範例。

方法一:若程式不長,可以使用行內(inline)方式撰寫事件函式。

<div>

<button type="button" onclick="alert('Hello')">Hello</button>

</div>

方法二:建立函式,再註冊此函式給事件onclick。

function Hello(){

alert("Hello");

}

將函式Hello註冊給按鈕的onclick事件。

<div>

<button type="button" onclick="Hello()">Hello</button>

</div>

方法三:經由改寫windows.onload函式,建立與註冊函式給事件onclick。

window.onload = function(){

var btn1 = document.getElementById("btn1");

btn1.onclick = function(){

alert("Hello");

}

}

HTML的按鈕部分不須改寫。

<div>

<button type="button" id="btn1">Hello</button>

</div>

本單元範例程式碼如下。

本單元範例程式碼預覽結果如下。

點選第一個「點選顯示時間」按鈕,結果如下。

滑鼠與鍵盤事件

使用者互動中最常用的事件就是滑鼠與鍵盤事件,以下分別敘述滑鼠與鍵盤事件。

本單元範例程式碼如下。

本單元範例程式碼預覽結果如下,滑鼠移動到按鈕上驅動mouseover,離開按鈕驅動mouseout。