7

首先让我说我是一名 PHP 开发人员,而不是 ASP 开发人员。(我真的希望 ASP 有isset()。)而且我在实时环境中工作,所以我真的没有机会进行任何测试。

我发现的所有资源都提出了测试变量是否存在的不同方法。

这是我正在尝试做的事情:

在某些页面上,我设置了一个变量来保存机器人<meta>标签的值:

dim dsep_robots
dsep_robots = "nofollow,noindex"

所有页面包括header.asp. 在我的头文件中,我想测试是否dsep_robots有一个值,如果有,则输出该值,否则,什么也不输出。

我认为测试是否dsep_robots具有值可能如下所示:

if not dsep_robots = "" then
    '...
end if

PHP 中的最佳实践表明,当您使用可能存在或可能不存在的变量时,您应该始终进行测试if (isset($var)) {...}(如果不这样做,如果变量不存在,则会触发通知)。

ASP 中有没有这样的东西——即我真的需要测试它是否存在,或者我可以简单地测试它是否有值吗?

4

4 回答 4

11

顺便说一句,你的问题不是关于经典的 ASP,而是一个 VBScript 问题。VBScript 可以出现在 ASP 之外的脚本中。而且编译不是在 VBScript 中完成的,因为它是一种解释型语言。没关系。

我认为这里有些混乱-您的问题似乎与未初始化的变量有关,而不是与未声明的变量有关。对于未声明的变量,请参见下文。

对于未初始化的,请尝试函数IsEmpty。要检查 null,请尝试使用IsNull函数。

dim x
x = 1
dim t
Response.write isempty(x)
Response.write "<br>"
Response.write isempty(t)   

将显示:

错误的

真的

检测未声明的变量

如果您在标题中包含 Option Explicit,则使用未声明的变量将导致运行时错误。如果您的脚本不是 Option Explicit,它不会产生错误,并且没有函数会告诉您变量是否已声明。这听起来很草率,确实如此,但这是故意的。

唯一可以避免这种情况的方法是实际设置 Option Explicit,然后捕获当您尝试使用未声明的变量时将得到的错误。如果您捕获此特定错误,您会发现它的 Err.Number = 500。因此,以下将执行您想要的操作:

Option Explicit

dim x

On Error Resume Next

Response.Write dsep_robots  
If Err.Number > 0 Then
    Response.Write Err.Number
end if

当然,如果您设置 Option Explicit 并且您的代码中充斥着未声明的变量,那么您将得到到处抛出的错误,因此您需要在代码顶部设置 On Error Resume Next 以便您可以成功忽略它,只在你想要的时候捕获它。

顺便说一下,这是微软对 VBScript 的在线参考:

http://msdn.microsoft.com/en-us/library/d1wf56tt(v=VS.85).aspx

于 2010-11-04T17:25:54.773 回答
5

@Jazzerus:我建议将header.asp中的代码放入 aSub中,例如

Sub outputHeader(ByRef MyTitle, Byref dsep_robots)    
  'contents of header.asp
End Sub

...然后在您的调用页面中在顶部包含header.asp并使用

outputHeader "Title for this page", "value you want dsep_robots to have for page"

如果您没有dsep_robots在该页面上设置,则只需将第二个参数留空(“”)

然后只需检查变量是否为空Sub就足够了:

If dsep_robots <> "" Then
  Response.Write dsep_robots
End If
于 2010-11-04T16:51:01.097 回答
3

关于什么:

 If NOT IsEmpty(myvariable) Then...

这似乎对我有用。

于 2013-05-15T13:48:37.043 回答
0

我使用 VarType 函数来检测变量是否已定义。如果未定义测试变量,VarType 返回值 vbError (10)。有趣的是,可选参数不能是最后一个参数,否则 ASP 会抛出错误。

function Sample(p1,p2,p3,p4)
    if VarType(p3) <> vbError then
        'do something with p3
    end if
end function

ThisWorks=Sample(1,2,,3)
ThisFails=Sample(1,2,3,)
于 2021-12-08T17:23:49.153 回答