Active Server Pages/变量类型
在本节中,您将学习 Active Server Pages 中的变量。这包括命名约定,如何声明变量,不同的基本类型以及命名约定。学习完本节后,您应该对可用的变量类型以及如何在 Web 应用程序中使用不同类型有深刻的理解。
ASP 中的所有变量都是松散类型的。这意味着您不需要声明变量的类型。这也意味着您可以将任何变量的值分配给任何其他变量。这个规则有一些例外,我们将在后面看到。
基本上,ASP 中的每个变量都有主要类型 Variant。它是 "variant" 意味着它所保存的值的类型可以改变。基本上,ASP 解释器将在您在一个表达式中将多个变量或类型组合在一起时自动处理所有类型之间的转换。
ASP 中使用的变量有三种不同的作用域。第一种是页面作用域,这意味着变量在整个持续时间内都可用。这些变量通常在页面的顶部声明。第二种类型的变量是过程作用域变量,它们在过程或函数声明中声明。第三种类型的变量是在类定义中使用,用于面向对象的编程。
<%
Dim sStr1 ' page-scoped variable
....
Procedure DoSomething
Dim mStr2 ' procedure-scoped variable
End Procedure
Function DoSomething
Dim mStr2 ' function-scoped variable
End Function
Class clsTest
Private msStr4 ' class-scoped variable
Public msStr5 ' class-scoped variable
End Class
%>
页面作用域变量对您的网页上包含的所有代码(包括过程和函数)可见。您甚至可以在类中访问页面作用域变量,尽管良好的面向对象设计会强烈反对这种做法。
过程作用域变量只在定义它们的范围内可见。在一个页面作用域变量和一个过程作用域变量使用相同变量名是完全可以接受的。请记住,当您这样做时,您将隐藏页面作用域变量,并且无法在过程中访问它。
类作用域变量只能通过类的实例访问。简化的 ASP 脚本语言中没有静态变量或静态方法的概念。您需要使用 ObjectName.VariableName 语法才能直接访问成员变量。只有声明为 Public 的变量才能以这种方式访问。私有类变量只能由类中定义的代码访问。关于在 Active Server Pages 中使用类的更多信息将在后面讨论。
要有效,ASP 变量名必须遵循以下规则
- 必须以字母字符开头
- 所有其他字符必须是字母数字字符或下划线 ("_")
- 名称长度不能超过 255 个字符
- 名称在定义的作用域内必须是唯一的
- 名称不能与内置函数、过程和对象的保留字相同。
变量名与语句一样,不区分大小写。这意味着如果您使用名称 "myVar" 声明一个变量,则可以使用 "MYVAR" 或 "myvar" 甚至 "MyVaR" 来访问它。
避免使用保留字并使识别变量类型更容易的一种方法是使用命名约定。通常,变量名的第一个字母或几个字母表示它保存的信息。
示例
- nCount n 代表整数或数字,保存用于计数某个东西的值,例如控制循环。
- sName s 代表字符串,保存表示名称的值。
- bIsActive b 代表布尔值,保存真或假值,在这种情况下,如果某些东西处于活动状态,则为真,否则为假。
遵循命名约定可以帮助避免混乱的代码,并养成良好的编程习惯。它还允许其他人使用您的代码,并帮助调试或修改它。除了命名约定,还可以使用注释来记录变量在 ASP 页面中的用途。
示例
Dim nCount ' 用于在控制循环中计数值。
Dim sName ' 用于存储用户在网页表单中输入的名称。
Dim bIsActive ' 用于测试用户的帐户是否处于活动状态。
您将在本文档的后面了解更多关于命名约定的内容。
要声明变量,您可以对页面和过程作用域变量使用 Dim 语句。在 Dim 语句之后,您可以放置一个用逗号分隔的变量名列表。如果您愿意,您也可以将每个变量放在单独的一行上。这允许您为每个声明的变量添加注释。
<%
Dim sAction ' form action
Dim sQuery ' database query
Dim I, J, K
%>
您应该将变量放置在页面或过程中的固定位置。通常,大多数人将声明放置在页面的最顶部(开头)或过程的顶部。其他人认为将变量声明放置在第一次使用它们的位置上方更有意义。
当我们谈论基本类型时,我们指的是不能分解为更小的基本类型的低级变量类型。基本上,这些是 Active Server Pages 理解的 "内置" 变量。
这些有时被称为变量的 "子类型",因为变量的主要类型是 "variant"。每个变量可能具有以下表格中显示的子类型之一。如果您使用过其他编程语言,那么这些基本类型对您来说非常熟悉。
类型名 | 值 | 内存 | 示例 |
---|---|---|---|
Boolean | True 或 False | 2 字节? | true |
Byte | 0 到 255 | 1 字节 | 127 |
String | 任何 Unicode 字符 | 无限 | "unicode: ê" |
Int | -32,768 到 32,767 | 2 字节 | 147 |
Long | -2,147,483,648 到 2,147,483,647 | 4 字节 | 3458972 |
Single | 1.401298E-45 到 3.402823E38 (pos) -3.402823E38 到 -1.401298E-45 (neg) |
4 字节 | 23.546234 |
Double | 4.94065645841247E-324 到 1.79769313486232E308 (pos) -1.79769313486232E308 到 -4.94065645841247E-324 (neg) |
8 字节 | 43872452.23445 |
Currency | -922,337,203,685,477.5808 和 922,337,203,685,477.5807 | 8 字节 | 132412.34 |
Datetime | 01/01/100 到 12/31/9999 | 8 字节 | '09/23/2004 12:34 AM' |
Object | 对象引用 | 8 字节? | Server.CreateObject("...") |
除了上面显示的值之外,以下特殊值也可以分配给 Active Server Page 变量
类型名 | 值 | 内存 | 示例 |
---|---|---|---|
Empty | vbEmpty | 2 字节? | vbEmpty |
Null | null | 2 字节? | null |
空值是新声明变量的默认值(从未分配任何值)。如果在布尔上下文中测试,它等效于 "false",如果在字符串上下文中测试,它等效于空字符串 ("")
您不需要过多地担心设置变量的类型。这几乎是自动为您完成的。如果您想设置分配给变量的类型,您可以使用与每种类型相对应的 ASP 转换函数。
此外,还有验证函数可用于确保变量与指定类型兼容。这并不意味着变量具有该子类型。相反,这意味着变量可以成功地转换为该类型。
类型名 | 转换 | 验证 |
---|---|---|
Boolean | CBool | n/a |
Byte | CByte | IsNumeric |
String | CStr | n/a |
Int | CInt | IsNumeric |
Long | CLng | IsNumeric |
Single | CSng | IsNumeric |
Double | CDbl | IsNumeric |
Currency | CCur | IsNumeric |
Datetime | CDate | IsDate |
Object | n/a | IsObject |
Empty | n/a | IsEmpty |
Null | n/a | IsNull |
字面量是您插入 ASP 代码并在表达式中使用的值。字面量本身没有用处,但在赋值语句或输出语句等语句中使用时
<%
' examples of literal values
Dim sString, nInt, fFloat, dDate, bBool
sString = "Hello There"
nInt = 1234
fFloat = -25.324
dDate = DateSerial(2004, 10, 28)
bBool = True
%>
您会注意到在 ASP 中没有办法指定日期字面量。因此,您需要使用函数调用来使用 **DateSerial** 构建日期值,或者可以使用 **Now()** 获取当前日期和时间。
字面量的值受上述基本类型表中指定的限制约束。如果您尝试使用超出任何类型可接受范围的值,您将收到一条错误消息指示此事实,并且您的 ASP 页面将终止执行。
在某些情况下,您可能希望创建“命名常量”,而不是一直使用字面量。如果您创建了一个将在站点上的多个脚本中使用的通用包含文件,这将特别有用。您可以使用 **Const** 关键字定义常量,如下所示
<%
Const PI = 3.141592654
Const RECS_PER_PAGE = 25
Const FSO_FORREADING = 1
Const FSO_FORWRITING = 0
%>
通常的做法是使用全大写变量作为常量定义,尽管这不是必需的。它只是使您的代码更易于阅读和维护。
命名约定是在您的网站上使用的所有变量的标准命名方式。有各种不同的方法用于命名变量,一整章都可以专门讨论这个主题。其中最受欢迎的一种是匈牙利命名法,其中变量名称的第一个字母指示变量的主要子类型。
类型名 | 字母 | 示例 |
---|---|---|
Boolean | b | bIsMale |
Byte | z | zAge |
String | s | sFirstname |
Int | n | nAge |
Long | l | lPageHits |
Single | f | fScore |
Double | d | dMass |
Currency | m | mBalance |
Datetime | d | dExpiration |
Object | o | oFSO |
微软为 Visual Basic 提出的标准是为他们的变量使用 3 个字母的命名约定。这对阅读和维护代码来说更清楚。有些人认为这对于轻量级脚本语言来说有点过头。
类型名 | 字母 | 示例 |
---|---|---|
Boolean | bln | blnIsMale |
Byte | byt | bytAge |
String | str | strFirstname |
Int | int | intAge |
Long | lng | lngPageHits |
Single | sng | sngScore |
Double | dbl | dblMass |
Currency | cur | curBalance |
Datetime | dat | datExpiration |
Object | obj | objFSO |