分类: 系统运维
2006-07-14 14:23:37
在本書前面的例子, 你已多次看過變數 (variable) 的操作, 變數是一個我們自訂的名稱, 這名稱可用來代表一個數值、一個字或一句文字, 而這代表的數值或文字可隨程式的進展而改變, 例如以下有關圓形面積的計算:
area= 0 (
這將 0 放在 area 這字上,
因此開始時 area=0
)
area= rad *
rad * 3.1416 ( 這是設定 area
的新數值 )
在以上的程式, area 沒有固定數值 (因此稱為變數), 而是跟著 rad 的數值而改變, 例如 rad 是 5, area 就會是 78.54, 若 rad 是 8, area 就會是 201.06。
變數的名稱是為 identifier (識別字), 在 script 中放下一個 identifier, 瀏覽器就會找這變數來處理。Identifier 是一個自訂的名稱, 但要依一定規格 (請看 1.10-6 的一節), 在本書的例子, 這些名稱用粗斜體來顯示, 例如 area。
要設定一個變數, 標準是使用 var 這一個指令, 但假若你同時將一個數值配給這變數, 可略去 var 這字, 例如:
var area
= 10 ← 設定 area 這變數及給予 10 的始值,
這是標準語法。
document.write(area) ← 這會顯示
10 。
var area
← 設定 area
這變數, 沒有配值。
document.write(area) ← 這會顯示 undfined (沒有指定)。
area =10
← 設定 area
這變數及給予 10 的始值, 簡略寫法。
document.write(area) ←
這會顯示 10。
area ←
這會被瀏覽器看成是錯誤, 因瀏覽器不知這是什麼。
document.write(area)
在 JavaScript, assignment (配值) 有兩個用途:
1. 將一個屬性給予一個物件的 property:
這在 1.3-2 的一節已說過, 我們用正確的語法來指定一個物件的 property, 就可將某一個屬性給予這 property。例如網頁的來源 (location) 是 window 的 property, 使用這語法:
這就可以將一個 URL 作為網頁的來源, 這類 assignment 操作, 在本書的例子都經常出現。
2. 設定變數:
Assignment 另一項功用是給予變數一個數值 (文字、數字或物件), 就是這一章說的變數設定, 使用的是 = 這符號, 方向是將右方的值放在左方的變數上, 例如:
我們在程式中設定變數, 一般有以下用途。
1. 代表最後才能定案的數值:
變數可讓一個數值隨程式的進展而變化, 到最後才計算出結果, 例如設定area=rad*rad*3.1416, area 會看 rad 是什麼數值, 然後才得出結果, 這是變數最常見的用途。
2. 控制程式的進展:
我們可以用變數來記錄程式的進展, 從而控制程式的變化, 隨後會說到 flag 的功用, 就是用變數來設定。在 練習-101, 該例子用 tries 這變數來記錄觀看者輸入錯誤的次數, 每錯一次 tries 就加 1, 到了某個數值就作出反應, 這就是用變數來控制程式。
3. 用來代表傳回的數值:
變數可用來代表一項功能產生出來的數值, 在程式術語, 我們是說這功能傳回一個值 (return a value), 這值可以是數字, 也可以是文字。
例如在 Date object 的一章說到這功能: new Date( ) , 這是傳回當時系統的時間, 這時間要用一個名稱來代表, 例如 x=new Date( ), 這 x 就代表傳回的資料, 我們用 document.write(x) 或 alert(x) 就可看到 x代表的資料。
4. 用變數代表 object:
若 JavaScript 內有一些長的 object 名稱, 我們可以使用一個變數來代表這名稱, 請看 練習-37 的例子, 例如:
x=document.display.inbox 或 x=document.display.inbox.value
開啟子視窗時, 我們也可用變數來代表新變出來的視窗, 例如msgWin=window.open(" . . . . ") 。
上述的第三及第四個用途, 不是絕對要使用變數, 例如以下三句:
x=document.fm.tx.value 用
x 代表文字框的文字
y=x.toUpperCase(
) 將 x
代表的文字變為大寫, 並用 y
代表
alert(y) 用
alert( ) 顯示 y
代表的文字
筆者在這書中有很多這樣的寫法, 目的是將每項功能在一行列出來, 使讀者易於了解, 你初學程式時, 也可使用這寫法, 犯錯的機會較少, 但對程式熟習後, 就應使用以下的寫法:
alert(document.fm.tx.value.toUpperCase( ) )
在一個程式中, 假若變數有一連串的改變, 我們應該盡量使用同一變數來處理這連串的改變, 請看以下例子:
a=10
// (將 a 設為 10。)
a=a*2
// (將 a 乘 2
並將結果用 a 來代表, 即是
a 最後等於 20。)
a=a*4 // (將
a 乘 4 並將結果用 a
來代表, 即是 a 最後等於 80。)
alert(a) //
(在 alert 對話盒中會顯示 80。)
以上的寫法只使用 a 一個變數, 這變數在程式的進展中一路改變。另一個寫法是使用多個變數, 請看以下例子。
這寫法與前個寫法結果一樣, 但使用了三個變數, 在程式的操作中, 這要在記憶體耗用多四個位置來記載多出的兩個變數, 如下:
第二個寫法不只耗用記憶體空間, 操作也較為緩慢, JavaScript 的程式一般都較細少, 所以問題不大, 不過我們也應養成良好的程式編寫習慣。
請同時參看 7.7 的一節。
假若變數是用來代表文字 (string), 這文字就要放在 " " 內, 否則會被看成是錯誤, 例如:
x="telephone number at home"
x=telephone number at home ← 錯
假若變數是用來代表數字, 這數字不能放在 " " 內, 否則會被看成是文字, 例如
y = 24680 ← y 代表 24680 這數字
y ="24680" ← y 代表 24680 這文字
練習-42 文字及數字變數
在這練習, 你可看到在變數中, 一個數字可以作為數值來處理, 也可作為文字來處理, 看我們是否將數字放在 " " 內。
1. 請用瀏覽器開啟示範磁碟中的 , 這檔案有以下內容:
2. 開啟瀏覽器及載入這檔案, 應見到以下顯示:
第一項會被看作為數值來處理, 所以會變出 7 的加值, 其他兩項就只是作為文字來顯示。
若網頁中的 JavaScript 經常要重複使用一句長文字, 我們可以用一個變數來代表這句文字, 就可減少輸入的工夫及錯誤的機會, 例如:
a="Please note that this message may not be correct in some cases"
練習-43 文字變數
這是個簡單的練習, 你看到文字變數的示範。
1. 請用瀏覽器開啟示範磁碟中的 , 這檔案有以下內容:
2. 網頁開啟後, 你會見到在網頁及在 alert 對話盒中分別會有文字出現, 請比較兩者格式不同之處。
3. 請你將這檔案複製去硬碟, 然後用「記事本」將原始檔中變數設定的 " " 刪去, 如下:
a=Please note that this message \n may not be correct in some cases.
將這更改過的檔案存檔, 在瀏覽器中看這新檔案, 看有什麼錯誤。
在一個 function 內設定一個 variable, 這個 variable 只在這 function 內有效, 是為local variable (局部變數)。 在一個 function 外設定的 variable 在整份文字都有效, 是為 global variable (通用變數), 請看以下例子。
練習-44 Local 及 global variables
在這練習, 你看到 local 及 global variables 的分別。
1. 請用瀏覽器開啟示範磁碟中的 , 這檔案有以下內容:
2. 載入這網頁時, 留意 document.write( ) 的句子, 看哪一句不能生效, 你應看到一個錯誤訊息的對話盒, 告訴你 b 是 undefined。
在這例子, b 這變數在 testVar( ) 這 function 內設定, 所以在 testVar() 的範圍外無效, 但你要留意一點, 若 testVar( ) 已啟動, b 就會變成 global variable, 在其他範圍也會生效, 你可試將上述的檔案作以下更改:
今次第 3 及第 4 句放在 testVar( ) 之後, testVar( ) 啟動時使到 b="This is a dog. " 變成 global variable, 所以今次第 4 個 document. write( ) 可顯示出 b 的文字。
( 第 5 章完 )