2010-11-04 97 views
4

讓我首先說我是一名PHP開發人員,而不是ASP開發人員。 (我真的希望ASP有isset()。)而且我在一個活躍的環境中工作,所以我沒有真正有機會做任何測試。如何判斷是否聲明ASP中的變量

我發現的所有資源都提供了測試變量存在的不同方法。

這裏就是我想要做的事:

在一些網頁上,我將其持有的值的機器人<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中是否存在這樣的事情 - 即我真的需要測試它是否存在,或者我可以簡單地測試它是否有價值?

+0

下面的兩個答案中的任何一個對你有用嗎? :-) – stealthyninja 2010-11-30 20:31:54

+0

我決定採用不同的方法,這不再是一個問題。 – Jazzerus 2010-12-01 16:59:00

+1

那麼,你可以決定你最喜歡哪個答案,然後接受它(即使你採用了不同的方法),只是爲了獎勵至少一個花時間和精力努力幫助你的人。只是在說'。 – Cyberherbalist 2012-02-22 23:03:01

回答

4

@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 
+0

如果我使用SSI包含它,是否可以調用header.asp中的函數:'<! - #include file =「header.asp」 - >'? – Jazzerus 2010-11-04 18:27:28

+0

@Jazzerus:是的。 – stealthyninja 2010-11-04 18:48:44

8

烏斯順便說一下,你的問題是不是傳統的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,它將不會生成錯誤,並且沒有函數會告訴您該變量是否已被聲明。這聽起來很sl,,而且是有意的。

您可以避免這種情況的唯一方法是實際設置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 

當然,如果設置選項顯式和你的代碼是充斥着未申報變量,那麼你會在整個地方得到錯誤,所以你需要在代碼的頂部設置On Error Resume Next,這樣你就可以成功地忽略它,並且只在你想要的時候將它陷入陷阱。

順便說一句,這裏是微軟的在線參考VBScript的:

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

+0

我最初曾將它標記爲ASP.NET,並被DOK重新標記爲ASP-classic。至於Option Explicit,在這個網站上使用的購物車軟件並沒有設置它,並且作爲一個活網站,我真的不想做任何可能導致很多錯誤的改變,即使它是爲了ASP最佳實踐。 我想我錯了。而不是Dim'ing一個變量,然後'<! - #include file =「header.asp」 - >',我應該在header.asp中執行一個檢查以確定它包含在哪個文件中。 – Jazzerus 2010-11-04 18:23:29

+0

如果你沒有啓用Option Explicit,你也可以使用'IsEmpty'來檢查未聲明的變量。不過,您將無法分辨未聲明和未初始化之間的區別。 – 2010-11-04 22:37:36

2

什麼:

If NOT IsEmpty(myvariable) Then... 

,似乎已經爲我工作。

相關問題