今天查看网页源代码,无意发现源代码尾部抛出asp的错误信息,但没有显示在网页上。
如果没查看源代码,还没发现asp运行代码出错了。
大致情况是这样,在asp中,有一个变量来表示用户当前使用的容量,注意这个变量是字符串,格式如: 20.3M, 50.6G
最后一个字符不是M,就是G
程序中需要做一个判断,如果用户使用的容量超过 50G,就弹出提示信息了,相关代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<% 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来改写一下:
1
2
3
4
5
6
7
8
9
10
|
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),当第一个条件不成立的时候,还会继续判断下一个条件是否成立:
再来一段验证代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<% 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