ASP 变量
Dim 声明、Variant 类型、数组、作用域与生命周期。
Key PointsVBScript 只有一种数据类型 Variant,声明用 Dim;变量在页面级、Sub 级、Session、Application 各有不同寿命。
声明与赋值
ASP
<%
Dim name, age, price
name = "Ada"
age = 36
price = 99.5
Response.Write name & " / " & age & " / " & price
%>Output
Ada / 36 / 99.5Variant 类型
Every VBScript variable is a Variant whose subtype follows the assigned value (string, integer, date, boolean…). Convenient, but type errors surface only at runtime.
ASP
<%
Dim v
v = "10"
Response.Write TypeName(v) & "<br>" ' String
v = 10
Response.Write TypeName(v) & "<br>" ' Integer
v = 10.5
Response.Write TypeName(v) & "<br>" ' Double
v = Now()
Response.Write TypeName(v) & "<br>" ' Date
v = True
Response.Write TypeName(v) & "<br>" ' Boolean
%>Output
String
Integer
Double
Date
Boolean类型转换
ASP
<%
Response.Write CStr(123) & "<br>" ' "123"
Response.Write CInt("42") + 1 & "<br>" ' 43
Response.Write CLng("9999999999") & "<br>"
Response.Write CDbl("3.14") * 2 & "<br>"
Response.Write CDate("2026-11-03") & "<br>"
Response.Write IsNumeric("abc") & "<br>" ' False
%>Output
123
43
9999999999
6.28
2026/11/3
FalseValues from Request are always strings. Convert with CInt/CDbl before arithmetic; guard with IsNumeric to avoid type-mismatch errors.
数组
ASP
<%
Dim langs(2) ' 下标 0..2,共 3 个元素
langs(0) = "VBScript"
langs(1) = "JScript"
langs(2) = "Perl"
Dim i
For i = 0 To UBound(langs)
Response.Write langs(i) & "<br>"
Next
' 动态数组
Dim dyn()
ReDim dyn(5)
dyn(0) = "a"
ReDim Preserve dyn(10) ' 保留已有元素,扩容
%>Output
VBScript
JScript
PerlDim a(2) declares three elements (0, 1, 2), not two. ReDim clears the data unless you add Preserve, and Preserve can only change the last dimension.
四种作用域
| Scope | Lifetime | Declared by |
|---|---|---|
| Page | 一次请求 | 页面顶部 Dim |
| Procedure | 一次调用 | Sub / Function 内 Dim |
| Session | 一个用户的一次访问期 | Session("x") = ... |
| Application | 站点启动到停止 | Application("x") = ... |
Page-level variables die with the request. To survive across pages use
Session or Application; to share across users only Application or a database works.声明与赋值
ASP
<%
Dim name, age, price
name = "Ada"
age = 36
price = 99.5
Response.Write name & " / " & age & " / " & price
%>Output
Ada / 36 / 99.5Variant 类型
VBScript 里所有变量都是 Variant,它会根据赋的值自动决定子类型(字符串、整数、日期、布尔……)。好处是不用管类型,坏处是类型错误要到运行时才暴露。
ASP
<%
Dim v
v = "10"
Response.Write TypeName(v) & "<br>" ' String
v = 10
Response.Write TypeName(v) & "<br>" ' Integer
v = 10.5
Response.Write TypeName(v) & "<br>" ' Double
v = Now()
Response.Write TypeName(v) & "<br>" ' Date
v = True
Response.Write TypeName(v) & "<br>" ' Boolean
%>Output
String
Integer
Double
Date
Boolean类型转换
ASP
<%
Response.Write CStr(123) & "<br>" ' "123"
Response.Write CInt("42") + 1 & "<br>" ' 43
Response.Write CLng("9999999999") & "<br>"
Response.Write CDbl("3.14") * 2 & "<br>"
Response.Write CDate("2026-11-03") & "<br>"
Response.Write IsNumeric("abc") & "<br>" ' False
%>Output
123
43
9999999999
6.28
2026/11/3
False从 Request 拿到的参数永远是字符串。要做算术必须先 CInt / CDbl,否则 "1" + 1 的结果取决于上下文,很容易出错。转换前用 IsNumeric 判断能避免类型不匹配错误。
数组
ASP
<%
Dim langs(2) ' 下标 0..2,共 3 个元素
langs(0) = "VBScript"
langs(1) = "JScript"
langs(2) = "Perl"
Dim i
For i = 0 To UBound(langs)
Response.Write langs(i) & "<br>"
Next
' 动态数组
Dim dyn()
ReDim dyn(5)
dyn(0) = "a"
ReDim Preserve dyn(10) ' 保留已有元素,扩容
%>Output
VBScript
JScript
PerlDim a(2) 声明的是3 个元素(0、1、2),不是 2 个。ReDim 会清空数据,要保留必须加 Preserve——但 Preserve 只能改最后一维。
四种作用域
| 作用域 | 生命周期 | 声明方式 |
|---|---|---|
| 页面 | 一次请求 | 页面顶部 Dim |
| 过程 | 一次调用 | Sub / Function 内 Dim |
| 会话 | 一个用户的一次访问期 | Session("x") = ... |
| 应用 | 站点启动到停止 | Application("x") = ... |
页面级变量在请求结束后就销毁。想跨页面保留,必须放
Session 或 Application;想跨用户共享,只能放 Application 或数据库。