標籤:
今天查看網頁原始碼,無意發現原始碼尾部拋出asp的錯誤資訊,但沒有顯示在網頁上。
如果沒查看原始碼,還沒發現asp運行代碼出錯了。
大致情況是這樣,在asp中,有一個變數來表示使用者當前使用的容量,注意這個變數是字串,格式如: 20.3M, 50.6G
最後一個字元不是M,就是G
程式中需要做一個判斷,如果使用者使用的容量超過 50G,就彈出提示資訊了,相關代碼如下:
12345678910111213 |
<% str = "59.3G" if right(str,1) = "G" and cdbl(replace(str, "G" , "" )) > 50 then response.write( "> 50G" ) else response.write( "< 50G" ) end if %> |
運行輸出結果: > 50G
當 str = "600.3M"的時候, 程式就拋出錯誤了:
Microsoft VBScript 執行階段錯誤 (0x800A000D)
類型不符: ‘cdbl‘
並沒有輸出我所期望的: < 50G
我們用同樣的邏輯判斷,使用java來改寫一下:
12345678910 |
String str = "59.3G" ; if (str.endsWith( "G" ) && Double.parseDouble(str.replaceAll( "G" , "" )) > 50 ) { System.err.println( "> 50G" ); } else { System.err.println( "< 50G" ); } |
輸出的結果:
> 50G
如果 String str = "630.3M";
輸出的結果:
< 50G
總結:
從上面的兩種代碼來看,在asp中,當判斷多個條件時(and),當第一個條件不成立的時候,還會繼續判斷下一個條件是否成立:
再來一段驗證代碼:
123456789101112131415161718192021 |
<% function abc() response.write( "abc()...<br>" ) abc = true end function str = "59.3M" int x if right(str,1) = "G" and abc then response.write( "> 50G" ) else response.write( "< 50G" ) end if %> |
輸出:
abc()...
< 50G
而在 java 代碼中,當進行多個條件(與, &)判斷時,當第一個條件不成立的時候,就不會再進行下面的條件判斷,不再執行下面的判斷代碼了。
2014-04-02
由asp的一個錯誤,看語言的不同:asp & java