在ASP中,未初始化的Session变量为Empty。我知道检查会话值和删除值的正确方法如下:
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变量是否安全?即,以下是"几乎同样好的"作为上面显示的正确方法?
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且未设置= ""
?答案 0 :(得分:3)
Empty
是一个奇怪的野兽:它同时等于""
和0
。说真的,试试吧:
dim x, y, z
x = Empty
y = ""
z = 0
Response.Write (x = y) AND (x = z)
它会写出&#34; True&#34;。
这意味着对Not IsEmpty(myvar)
的测试相当于测试myvar <> ""
,但IsEmpty(myvar)
等同于myvar = ""
。理论上的差异是否会让你感到困扰只是你可以回答的问题,但就个人而言,我不会在重构上浪费时间。
如果你做决定重构,我会建议忘记IsEmpty
和IsNull
等等,只使用& ""
&#34; hack& #34;:
If Session("myvar") & "" <> "" Then
这样可以透明地处理Nulls 和 Empties,而无需编写大量代码。
答案 1 :(得分:0)
IsNull
,IsEmpty
和VarType
IsNull - 如果表达式为Null则返回True,即它包含no 有效数据;否则,IsNull返回False。如果表达式由 多个变量,任何组成变量中的Null都会导致True 为整个表达式返回。
VarType - 返回表示变量子类型的值。
IsEmpty - 如果变量未初始化,则返回True,或者是 显式设置为Empty;否则,返回False。总是假的 如果表达式包含多个变量,则返回。