變量是計算機內存中已命名的存儲位置,其中包含了數字或字符串等數據。變量包含的信息被稱為變量的值。變量使用用戶便於理解腳本操作的名稱為用戶提供了一種存儲、檢索和操作數據的途徑。
聲明和命名變量
命名和聲明變量應遵循腳本語言的規則及指導。即使在使用變量前不需要去聲明變量,也應養成在編程時聲明變量的良好習慣,因為這樣有助於防止錯誤發生。聲明一個變量意味著告訴腳本引擎,有一個特定名稱的變量,這樣就可以在腳本中引用該變量。
VBScript
VBScript 並不需要聲明變量,但在使用所有變量前聲明它們是一種好的腳本書寫習慣。要在 VBScript 中聲明變量,請用 Dim、 Public 或 PRivate 語句。例如:
<% Dim UserName %>
可以在需要顯式聲明變量的 .ASP 文件中用 VBScript Option Explicit 語句。Option Explicit 必須在任何一個 ASP 指令之後及任何一個 Html 文本或腳本命令之前出現。該語句僅影響用 VBScript 書寫的 ASP 命令,而不會影響 JScript 命令。
JScript
Microsoft JScript 僅當變量為本地過程變量時才需聲明,但在使用所有變量前聲明它們是一種好的腳本書寫習慣。要聲明一個變量,請使用 var 語句。例如:
<% var UserName; %>
變量作用域
變量的作用域即生命期,決定哪些腳本命令可訪問變量。在過程內部聲明的變量具有局部作用域。每執行一次過程,變量就被創建然後消亡。而過程外部的任何命令都不能訪問它。在過程外部聲明的變量具有全局作用域,其值能被 ASP 頁上的任何腳本命令訪問和修改。
聲明變量時,局部變量和全局變量可以有相同的名稱。而改變其中一個的值並不會改變另一個的值。如果沒有聲明變量,則可能不小心會改變一個全局變量的值。例如,以下腳本命令返回值 1,雖然有兩個名為 Y 變量:
<%
Dim Y
Y = 1
Call SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Dim Y
Y = 2
End Sub
%>
由於變量沒有顯式聲明,以下的腳本命令將返回 2。當過程調用將 Y 設置為 2 時,腳本引擎認為該過程是要修改全局變量:
<%
Y = 1
Call SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Y = 2
End Sub
%>
養成顯式聲明所有變量的編程習慣可以避免許多問題。尤其在當您用 #include 語句將文件包含進 ASP 主頁時,就顯得更為重要。一個獨立文件中被包含的腳本是被當作整個包含它的文件的一部分來處理的。用不同的名稱來命名主腳本和被包含腳本中用到的變量,這容易被遺忘,除非聲明變量。
為變量賦予會話或應用程序作用域
全局變量僅在單個 ASP 頁中可用,要使它在單個 ASP 頁之外可用,就必須為變量賦予會話或應用程序作用域。會話作用域變量對一個用戶所請求的 ASP 應用程序中的所有頁都是可用的。應用程序作用域變量也如此。對單個用戶來說,會話變量是存儲信息的最佳途徑,例如,首選項、用戶名或用戶標識。對於一個特殊應用程序的所有用戶,應用程序作用域是存儲信息的最佳途徑,例如,應用程序特定的問候語或應用程序所需的初始值。
ASP 提供兩個內建對象來讓您存儲變量:session 對象和 application 對象。
您也可以創建具有會話或應用程序作用域的對象實例。
會話作用域
要為變量賦予會話作用域,將該變量存儲到 Session 對象中即可,方法是為該對象的已命名條目指派一個值。例如,以下命令將兩個新的變量存儲到 Session 對象中。
<%
Session("FirstName") = "Jeff"
Session("LastName") = "Smith"
%>
要 Session 對象中檢索信息,可以用輸出指令 (<%=) 或 Response.Write 訪問已命名的條目。以下示例用輸出指令顯示 Session("FirstName") 的當前值:
Welcome <%= Session("FirstName") %>
可在 Session 對象中存儲用戶首選項,然後就可以訪問這些首選項,從而決定將哪一頁返回給用戶。例如,您可以允許用戶在應用程序的第一頁指定純文本內容,然後將這一選擇應用到用戶在該應用程序中訪問的所有後續頁。
<% If Session("ScreenResolution") = "Low" Then %>
This is the text version of the page.
<% Else %>
This is the multimedia version of the page.
<% End If %>
應用程序作用域
要為變量賦予應用程序作用域,將該變量存儲到 Application 對象中即可,方法是為該對象的已命名條目指派一個值。例如,以下命令將一個應用程序特定的問候語存儲到Application 對象中:
<% Application("Greeting") = "Welcome to Exploration Air" %>
要從 Application 對象中檢索信息,可以使用 ASP 輸出指令 (<%=) 或 Response.Write 從該應用程序的任意後續頁中訪問已命名條目。以下示例用輸出指令顯示 Application("Greeting") 的值:
<%= Application("Greeting") %>
使用常量
常量是用來代替一個數或字符串的名稱。一些隨 ASP 提供的基本組件,例如 ActiveX Data Objects (ADO),定義了您在腳本中可以使用的常量。組件可在一個組件類型庫中聲明常量,組件類型庫是一個包含 ActiveX 組件所支持的對象和類型的信息的文件。一旦在 Global.asa 文件中聲明了一個類型庫,您就可以在該應用程序的任意頁中使用已定義的常量。
可在 Global.asa 中用 <METADATA> 標記為應用程序聲明類型庫。例如,要聲明 ADO 類型庫,可用以下語句:
<!--METADATA TYPE="typelib"
FILE="c:\program files\common files\system\ado\msado15.dll"
-->
這樣,您就可以在與 Global.asa 文件相同的應用程序的中使用 ADO 常量。在下面的示例中,adOpenKeyset 和 adLockOptimistic 是 ADO 常量:
'Create and Open Recordset Object
Set RsCustomerList = Server.CreateObject("ADODB.Recordset")
RsCustomerList.ActiveConnection = OBJdbConnection
RsCustomerList.CursorType = adOpenKeyset
RsCustomerList.LockType = adLockOptimistic
在以前版本的 ASP 中,一些組件在文件中提供常量定義,每個使用那些組件的 ASP 文件必須包含該文件。用 #include 指令來包含常量定義的用法仍被支持,但使用類型庫通常更方便並且能使腳本更易於升級。在以後版本的 ASP 中,組件可能將不再提供常量定義文件。
您可以定義自己的常量。在 VBScript 中,用 Const 語句,在 JScript 中,用 var 語句。如果在多個 ASP 頁中使用常量,可在獨立的文件中放置常量,然後將其包含進每一個使用該常量的 ASP 文件中去。