【问题标题】:How to tell whether a variable in ASP has been declared如何判断 ASP 中的变量是否已声明
【发布时间】:2010-11-04 15:46:19
【问题描述】:

首先让我说我是一名 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 中是否有这样的东西——即我是否真的需要测试它是否存在,或者我可以简单地测试它是否有值?

【问题讨论】:

  • 以下两个答案是否适合您? :-)
  • 我决定采用不同的方法,这不再是问题。
  • 好吧,你也许可以决定你最喜欢哪个答案并接受它(即使你采用不同的方法)只是为了奖励至少一个花时间和努力帮助你。只是说。

标签: asp-classic isset


【解决方案1】:

顺便说一句,您的问题不是关于经典的 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

【讨论】:

  • 我最初将它标记为 ASP.NET,它被 DOK 重新标记为 ASP-classic。至于Option Explicit,本站使用的购物车软件并没有设置,而且作为一个实时网站,我真的不想做任何可能导致很多错误的更改,即使它是为了利益ASP 最佳实践。我想我做错了。我应该在 header.asp 中执行检查以确定它被包含在哪个文件中,而不是使变量变暗然后&lt;!-- #include file="header.asp" --&gt;
  • 如果你没有开启Option Explicit,你也可以使用IsEmpty来检查未声明的变量。但是,您将无法区分未声明和未初始化。
【解决方案2】:

@Jazzerus:我建议将header.asp 中的代码放入Sub,类似于

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

【讨论】:

  • 如果我使用 SSI 包含 header.asp 中的函数,是否可以调用它:&lt;!-- #include file="header.asp" --&gt;
【解决方案3】:

怎么样:

 If NOT IsEmpty(myvariable) Then...

这似乎对我有用。

【讨论】:

    【解决方案4】:

    我使用 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,)
    

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多