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

或者我应该重构代码库以便:

  1. 确定会话变量是否已设置的所有测试的形式为IsEmpty(Session("myVar"))
  2. 所有会话变量都是 Removed 且未设置 = ""?

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 = "" .这种主要是理论上的差异是否困扰您只有您可以回答,但就个人而言,我不会浪费时间在重构上。


如果您 决定重构,我建议您忘记 IsEmptyIsNull 等等,只使用 & "" "hack":

If Session("myvar") & "" <> "" Then

这将透明地处理空值 空值,您无需编写一大堆代码。

不,它可能不安全。也许您需要使用函数:IsNullIsEmptyVarType

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.

请看