首先让我说我是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)) {...}
(如果变量不存在,则不会触发通知)。 / p>
在ASP中是否有这样的东西 - 即我是否真的需要测试它是否存在,还是我可以简单地测试它是否有值?
答案 0 :(得分:10)
我认为这里存在一些混淆 - 你的问题似乎与未初始化的变量有关,而不是未声明的变量。对于未声明的变量,请参见下文。
对于未初始化,请尝试使用函数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
答案 1 :(得分:5)
@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
答案 2 :(得分:3)
怎么样:
If NOT IsEmpty(myvariable) Then...
似乎一直在为我工作。