分享
 
 
 

浅析VBS中的Null子类型

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

原文地址:

http://blog.csdn.net/estyle/archive/2004/06/30/30932.aspx

欢迎转载!但请注明出处(原文地址)和我的姓名:靳田

谢谢啦! ^_^

VBS中的数据类型只有一种,既Variant型。而Variant又可包含多种数值信息类型,它们被称之为子类型,例如Boolean、Integer、Double、String等!目前版本的VBS包含13种数据子类型,包括现在我们要讨论的Null。

微软官方文档中对Null子类型的描述是“不包含任何有效数据的Variant”。VBS初学者很可能会混淆Empty子类型和Null子类型,最有效的建议莫过于就是多看官方文档,那里面写得很清楚——至少对Empty写得很清楚。Empty并不是今天我们的主题,所以留给还不是很明白的朋友自行查阅资料并思考。

VBS中有一个IsNull函数用以判断表达式是否包含有效数据,或者说是否是Null子类型,这个想必大家都应该很清楚。问题出在下面这段没有使用IsNull函数的代码上:

Dim A

A=Null

If A=Null Then

MsgBox "Some Words Here!"

End If

如果你知道为什么上面这段代码不会弹出信息框,那也没有多大必要继续虐待你自己的眼睛了。

我在网上查过一些非官方的说明,比较经典的说法是:包含Null的表达式本身就是Null。在这里相当于判断条件中的“A=Null”等价于“Null”,既可把“If A=Null Then”看作“If Null Then”!如此以来,消息框没有出现就可以解释了。

但这个解释稍显模糊,不是吗?我们接着往下看。

在理解子类型的时候,首先思想上就请一定不要将它和值混为一谈。很高兴看到所有稍懂VBS的人都知道“A=Integer”有许多悬念!

但是,Null比较特殊,它本身还是VBS中的五个关键字之一,所以“A=Null”的用法是正确的。

——请注意区别Null关键字和Null子类型,用在程序中用到的都是Null关键字,Null作为子类型只在意义和概念层面上!

再看看官方文档中对Null关键字的解释:Null关键字用于指明变量包含的数据无效!

所以代码的第二行,实际作用是让变量A中储存的数据无效化(赋了个炸弹给A,Boom),虽然这对后面的代码并没有影响。

代码第三行,任何数据和无效的Null进行相等比较,就好像任何数除以0都会出错一样无效,所以返回值仍然是Null。

这样解释是不是要清楚多了?

为了加深理解,这里还是要牵扯一点Empty子类型和Empty关键字,官方说明自己去查。

未初始化的变量是Empty子类型,但因为归根结底是Variant型的,所以根据上下文它可以自动取值0或者零长字符串。而Empty关键字在比较表达式中相当于指代零长字符串或0!看下面这段代码:

Dim A

A=0

If IsEmpty(A) Then

MsgBox "Some Words Here!"

End If

很明显,A已经被初始化了,所以IsEmpty(A)为False!

但如果我们把“If IsEmpty(A) Then”替换成“If A=Empty Then”呢?

消息框出来了!这下是不是对子类型和关键字的区别更明白些了?

我们已经知道,Null关键字在参与比较运算的时候,由于无效的数据无法比较,所以结果无论如何不为True。那其它几种运算呢?请自行尝试吧,呵呵。

现在,再请考虑考虑,“IsNull(Null)”的返回值是什么?其实这句代码会产生一个编译期错误。这说明关键字和值之间是有区别的!——注意,并非说关键字不能当作参数传递给函数。我努力了,暂时还没有对这个问题得出更深入的结论,如果你知道,请赐教。

其实根据这个问题,我还进行了一些人生哲学方面的思考,有兴趣可以看看我的上一篇文章——由VBS中Null想到的人生方法论

总结一下:

一、多看官方文档或许有好处;

二、不混淆子类型、关键字和值,如果能区分清楚当然更好;

三、无效数据(Null子类型的变量或Null关键字)参与比较运算,结果无效(返回Null关键字),其它类型的运算请自行总结。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有