我在经典ASP页面中有以下VBScript:
function getMagicLink(fromWhere, provider)
dim url
url = "magic.asp?fromwhere=" & fromWhere
If Not provider is Nothing Then ' Error occurs here
url = url & "&provider=" & provider
End if
getMagicLink = "<a target='_blank' href='" & url & "'>" & number & "</a>"
end function
我在If Not provider Is Nothing Then
。
值是NULL,还是非NULL,为什么我会收到此错误?
编辑:当我调用对象时,我传入NULL,或者传入一个字符串。
答案 0 :(得分:34)
从您的代码中看,provider
是变体或其他变量,而不是对象。
Is Nothing
仅用于对象,但稍后您说它是一个值应为NULL或NOT NULL,由IsNull
处理。
尝试使用:
If Not IsNull(provider) Then
url = url & "&provider=" & provider
End if
或者,如果这不起作用,请尝试:
If provider <> "" Then
url = url & "&provider=" & provider
End if
答案 1 :(得分:20)
我在评论中看到很多混乱。 Null
,IsNull()
和vbNull
主要用于数据库处理,通常不在VBScript中使用。如果在调用对象/数据的文档中没有明确说明,请不要使用它。
要测试变量是否未初始化,请使用IsEmpty()
。要测试变量是否未初始化或包含""
,请在""
或Empty
进行测试。要测试变量是否为对象,请使用IsObject
并查看此对象是否在Is Nothing
上没有参考测试。
在您的情况下,您首先要测试变量是否为对象,然后查看该变量是否为Nothing
,因为如果它不是对象,则在获取“Object Required”错误时你在Nothing
上进行测试。
要在代码中混合和匹配的代码段:
If IsObject(provider) Then
If Not provider Is Nothing Then
' Code to handle a NOT empty object / valid reference
Else
' Code to handle an empty object / null reference
End If
Else
If IsEmpty(provider) Then
' Code to handle a not initialized variable or a variable explicitly set to empty
ElseIf provider = "" Then
' Code to handle an empty variable (but initialized and set to "")
Else
' Code to handle handle a filled variable
End If
End If
答案 2 :(得分:1)
我将在变量的末尾添加一个空格(“”)并进行比较。即使该变量为null,下面的内容也应该有效。您也可以在空格的情况下修剪变量。
If provider & "" <> "" Then
url = url & "&provider=" & provider
End if