|
变量是计算机内存中已命名的存储位置,其中包含了数字或字符串等数据。变量包含的信息被称为变量的值。变量使用用户便于理解脚本操作的名称为用户提供了一种存储、检索和操作数据的途径。 声明和命名变量 命名和声明变量应遵循脚本语言的规则及指导。即使在使用变量前不需要去声明变量,也应养成在编程时声明变量的良好习惯,因为这样有助于防止错误发生。声明一个变量意味着告诉脚本引擎,有一个特定名称的变量,这样就可以在脚本中引用该变量。 VBScript VBScript并不需要声明变量,但在使用所有变量前声明它们是一种好的脚本书写习惯。要在VBScript中声明变量,请用 Dim、Public或Private语句。例如: <% Dim UserName %> 可以在需要显式声明变量的.asp文件中用VBScript Option Explicit语句。Option Explicit必须在任何一个ASP指令之后及任何一个HTML文本或脚本命令之前出现。该语句仅影响用VBScript书写的ASP命令,而不会影响JScript命令。 关于这些命令的详细信息,请参阅VBScript语言参考。 JScript Microsoft JScript仅当变量为本地过程变量时才需声明,但在使用所有变量前声明它们是一种好的脚本书写习惯。要声明一个变量,请使用var语句。例如: <% var UserName; %> 有关var语句的详细信息,请参阅JScript语言参考。 变量作用域 变量的作用域即生命期,决定哪些脚本命令可访问变量。在过程内部声明的变量具有局部作用域。每执行一次过程,变量就被创建然后消亡。而过程外部的任何命令都不能访问它。在过程外部声明的变量具有全局作用域,其值能被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 有关<METADATA>标记的参考信息,请参阅TypeLibrary声明。 在以前版本的ASP中,一些组件在文件中提供常量定义,每个使用那些组件的ASP文件必须包含该文件。用#include指令来包含常量定义的用法仍被支持,但使用类型库通常更方便并且能使脚本更易于升级。在以后版本的ASP中,组件可能将不再提供常量定义文件。 您可以定义自己的常量。在VBScript中,用Const语句,在JScript中,用var语句。如果在多个ASP页中使用常量,可在独立的文件中放置常量,然后将其包含进每一个使用该常量的ASP文件中去。
|