转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
浅析VBS中的Null子类型         ★★★★

浅析VBS中的Null子类型

作者:闵涛 文章来源:闵涛的学习笔记 点击数:809 更新时间:2009/4/23 15:43:43

原文地址:
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关键字),其它类型的运算请自行总结。


[VB.NET程序]0、(空字串)、Null、Empty、与 Nothing 的区别  [其他]SQLStory摘录(七)————触摸NULL值
[ORACLE]Oracle9i中一个特殊等待事件--null event  [ORACLE]oracle中关于null排序的问题
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台