VBScript 中的 Empty, Null, "" 讨论

今天一个系统(ASP)忽然出了问题。原因是,原先系统里有一小段代码里关于 Request 获取的变量值的判断方法有点小问题。采用了类似如下的代码:

None.gif if   IsNull (pageNumber)  then
None.gif   pageNumber 
=   1
None.gif
end   if

而这个 pageNumber 是经过一个过滤函数输出来的。这个函数的思想大致像这样:

None.gif function  GetRequest(key)
None.gif  
dim  v
None.gif  v 
=  Request( " key " )
None.gif
None.gif  
if  合法(v)  then
None.gif    v 
=  过滤(v)  ' 去掉恶意干扰 sql 的一些字符
None.gif
   else
None.gif    v 
=   null
None.gif  
end   if
None.gif  
None.gif  GetRequest 
=  v
None.gif
end function

在这里我想说的是,其实没有必要人为的去引入可能给我们带来大麻烦的 null 这种值。

我们可以先做一个小试验,看看 Request 得到的变量到底有哪几种可能的情况。测试代码如下:

None.gif < %
None.gif
dim  a, hasValue
None.gif
None.gifhasValue 
=   true
None.gif
None.gif
=  Request( " hello " )
None.gif
None.gif
if   IsNull (a)  then
None.gif    Response.Write 
" <br>是 Null"
None.gif
    hasValue  =   false
None.gif
end   if
None.gif
None.gif
if   IsEmpty (a)  then
None.gif    Response.Write 
" <br>是 Empty"
None.gif
    hasValue  =   false
None.gif
end   if
None.gif
None.gif
if  a  =   ""   then
None.gif    Response.Write 
" <br>是空字符串"
None.gif
    hasValue  =   false
None.gif
end   if
None.gif
None.gif
if   not  hasValue  then  Response. End
None.gifResponse.Write 
" <br>有值:# "   &  a  &   " #"
None.gif
% >

然后分别测试:

(a) http://localhost/test/typeCheck.asp
(b) http://localhost/test/typeCheck.asp?hello=
(c) http://localhost/test/typeCheck.asp?hello=ok

输出的结果:
(a)
是 Empty
是空字符串


(b)
是空字符串

(c)
有值:#ok#

从上面的输出可以看出,对于默认接收到的值, 不管什么情况,我们都可以简单的用 = "" 这个条件来判断是否有值。
而人为的引入 null 是很不可取的做法。(这样做的弊病是跟其他地方可能存在的判断是否合法的标准不兼容,造成混淆)。正确的做法应该默认返回空字符串 ""。

简单一点讲,作为函数的返回值,应该是安全的,有效的值。

在 VBScript 中可以输出 "" 作为安全的返回值。

在 C# 中,要区分值类型和引用类型来处理。

对于 值类型可输出一个默认值比如对应于整数输出 0,
引用类型输出 null 才是合理的。(表示空指针,空引用)。

还可以试试这段代码的输出结果是什么(这个没多少实际意义):

None.gif < %
None.gif
if   Empty   =   ""   then
None.gif    Response.Write 
" <br>Empty = 空字符串"
None.gif
else
None.gif    Response.Write 
" <br>Empty <> 空字符串"
None.gif
end   if
None.gif
None.gif
if   IsEmpty ( "" then
None.gif    Response.Write 
" <br>IsEmpty(空字符串) = true"
None.gif
else
None.gif    Response.Write 
" <br>IsEmpty(空字符串) = false"
None.gif
end   if
None.gif%
>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值