ASP 会话变量:“”是否与 IsEmpty 相同?
ASP Session variables: Is "" same as IsEmpty?
在 ASP 中,未初始化的会话变量为空。我知道检查会话值和删除值的正确方法如下:
IF NOT IsEmpty(Session("myVar")) THEN
' Go ahead and use Session("myVar")
...
' Now if we're all done with myVar then remove it:
Session.Contents.Remove("myVar")
END IF
我继承了一个代码库,其中 Application 和 Session 变量通常在使用后设置 = ""
,并且值的所有测试都是 (Sessions("myVar") = "")
形式。此测试 似乎 在 Session 变量尚未声明时工作......或者它可能只是运气不好。
使用与空字符串的比较来测试 Session 变量是否安全?即下面的 "practically as good" 是上面显示的正确方法吗?
IF Session("myVar") <> "" THEN
' Go ahead and use Session("myVar")
...
' Now if we're all done with myVar then blank it:
Session("myVar") = ""
END IF
或者我应该重构代码库以便:
- 确定会话变量是否已设置的所有测试的形式为
IsEmpty(Session("myVar"))
- 所有会话变量都是
Remove
d 且未设置 = ""
?
Empty
是一只奇怪的野兽:它同时等于 ""
和 0
。说真的,试试看:
dim x, y, z
x = Empty
y = ""
z = 0
Response.Write (x = y) AND (x = z)
它会写出"True"。
这意味着 Not IsEmpty(myvar)
的测试等同于 myvar <> ""
的测试,但是 IsEmpty(myvar)
不 等同于 myvar = ""
.这种主要是理论上的差异是否困扰您只有您可以回答,但就个人而言,我不会浪费时间在重构上。
如果您 决定重构,我建议您忘记 IsEmpty
和 IsNull
等等,只使用 & ""
"hack":
If Session("myvar") & "" <> "" Then
这将透明地处理空值 和 空值,您无需编写一大堆代码。
不,它可能不安全。也许您需要使用函数:IsNull
、IsEmpty
和 VarType
IsNull -- returns True if expression is Null, that is, it contains no
valid data; otherwise, IsNull returns False. If expression consists of
more than one variable, Null in any constituent variable causes True
to be returned for the entire expression.
VarType -- Returns a value indicating the subtype of a variable.
IsEmpty -- returns True if the variable is uninitialized, or is
explicitly set to Empty; otherwise, it returns False. False is always
returned if expression contains more than one variable.
请看
在 ASP 中,未初始化的会话变量为空。我知道检查会话值和删除值的正确方法如下:
IF NOT IsEmpty(Session("myVar")) THEN
' Go ahead and use Session("myVar")
...
' Now if we're all done with myVar then remove it:
Session.Contents.Remove("myVar")
END IF
我继承了一个代码库,其中 Application 和 Session 变量通常在使用后设置 = ""
,并且值的所有测试都是 (Sessions("myVar") = "")
形式。此测试 似乎 在 Session 变量尚未声明时工作......或者它可能只是运气不好。
使用与空字符串的比较来测试 Session 变量是否安全?即下面的 "practically as good" 是上面显示的正确方法吗?
IF Session("myVar") <> "" THEN
' Go ahead and use Session("myVar")
...
' Now if we're all done with myVar then blank it:
Session("myVar") = ""
END IF
或者我应该重构代码库以便:
- 确定会话变量是否已设置的所有测试的形式为
IsEmpty(Session("myVar"))
- 所有会话变量都是
Remove
d 且未设置= ""
?
Empty
是一只奇怪的野兽:它同时等于 ""
和 0
。说真的,试试看:
dim x, y, z
x = Empty
y = ""
z = 0
Response.Write (x = y) AND (x = z)
它会写出"True"。
这意味着 Not IsEmpty(myvar)
的测试等同于 myvar <> ""
的测试,但是 IsEmpty(myvar)
不 等同于 myvar = ""
.这种主要是理论上的差异是否困扰您只有您可以回答,但就个人而言,我不会浪费时间在重构上。
如果您 决定重构,我建议您忘记 IsEmpty
和 IsNull
等等,只使用 & ""
"hack":
If Session("myvar") & "" <> "" Then
这将透明地处理空值 和 空值,您无需编写一大堆代码。
不,它可能不安全。也许您需要使用函数:IsNull
、IsEmpty
和 VarType
IsNull -- returns True if expression is Null, that is, it contains no valid data; otherwise, IsNull returns False. If expression consists of more than one variable, Null in any constituent variable causes True to be returned for the entire expression.
VarType -- Returns a value indicating the subtype of a variable.
IsEmpty -- returns True if the variable is uninitialized, or is explicitly set to Empty; otherwise, it returns False. False is always returned if expression contains more than one variable.
请看