ASP 会话变量:“”是否与 IsEmpty 相同?

fee*_*wet 5 session-variables asp-classic defaultifempty is-empty

在 ASP 中,未初始化的会话变量为空。我知道检查 Session 值和删除值的正确方法如下:

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
Run Code Online (Sandbox Code Playgroud)

我继承了一个代码库,其中 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
Run Code Online (Sandbox Code Playgroud)

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

  1. 确定是否已设置 Session 变量的所有测试均采用以下形式 IsEmpty(Session("myVar"))
  2. 所有会话变量都是Removed 而不是 set = ""

Mar*_*tha 4

Empty是一个奇怪的野兽:它同时等于""0。说真的,尝试一下:

dim x, y, z
x = Empty
y = ""
z = 0
Response.Write (x = y) AND (x = z)
Run Code Online (Sandbox Code Playgroud)

它会写出“True”。

这意味着测试 forNot IsEmpty(myvar)等同于测试myvar <> "",但IsEmpty(myvar)等同myvar = ""。无论这种主要理论上的差异是否困扰您,只有您可以回答,但就我个人而言,我不会浪费时间进行重构。


如果您确实决定重构,我建议忘记IsEmpty以及IsNull诸如此类的事情,而只使用& ""“hack”:

If Session("myvar") & "" <> "" Then
Run Code Online (Sandbox Code Playgroud)

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