1. 程式人生 > 其它 >ASP中的數字和字元比較

ASP中的數字和字元比較

昨晚和老迷聊天聊到很晚,說到一個把字串轉換為數字進行比較的問題。老迷說他喜歡保持字串本身的型別,進行字串的匹配比較,而不喜歡把字串強制轉換為數字進行比較。 一開始我不太明白這到底有什麼區別,比如

a = "1"
If a = 1 Then
    'Something
End If

a = "1"
If a = "1" Then
     'Something
End If

在VB中,變數的資料型別預設是 Variant,在必要的時候自動轉換,例如上例第一種,由於表示式右邊是數字,因此係統會自動將字串變數a轉換為數字型別,然後進行數字的比較。而第二種則沒有轉換型別這個過程。 這個從程式碼上看沒有任何區別的比較過程,在執行時卻差著一個步驟。這就是老迷關於他為什麼更願意保持字串變數的字串型別來進行比較的原因。

最簡單的運用就是使用者登入時,比如有個是否儲存 cookies 的選項。通常是用下拉選擇或者單選按鈕,表單資料經過ASP程式讀取之後,Request.Form("cookies") 的值預設情況下是字串型別的。我們往往是把它當成數字來用,有時候我們還習慣用 a = Cint(Request.Form("cookies")) 的方式在讀取時進行轉換,也或者不做轉換,直接用 If a = 1 來判斷。 實際上不管用哪種方法,都離不開一個轉換的過程,而且為了避免 Cint 函數出錯,我們往往還需要在前面增加一個 IsNumeric 的驗證,這樣一來,多出來的就不只是一個步驟了。 而如果我們直接把 Request.Form("cookies")

作為字串考慮,我們只需要一行程式碼即可:

If Request.Form("cookies") <> "" and a = "1" Then

就同時完成了資料有效性驗證和比較。 這個很小的細節,在實際程式設計中用到的地方非常多,每個地方都多兩個步驟,那的確在效能上就是比較低大的浪費了