当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > vbs中Empty和Null的区别

VBScript
用vbs脚本来关闭 HTML 页面的代码
用vbs实现确定是否安装了某个特定的补丁
用vbs确定用户的登录名的代码
用vbs找到映射到共享的所有驱动器并重新映射它们
可以从一台远程服务器运行 SP2 安装程序Install.vbs
用vbs判断一个日期是否在指定的时段内
vbs+hta中实现在单个 onClick 参数中包括多个子例程的代码
vbs中实现启动两个应用程序,一直等到其中一个程序结束,然后关闭另一个?
用vbs实现对文本文件中的项计数
用vbs对文本文件的内容进行排序
用vbscript把 Word 文档保存为文本文件的代码
用vbs返回 Internet Explorer 的下载控件和 Applet 的列表
用vbscript合并多个文本文件的代码
用vbscript防止本地用户更改其密码
用vbs针对一个 IP 地址范围运行脚本
用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
使用vbscript脚本在表单中进行选择的代码
一个把任何文件转成批处理的vbs脚本Any2Bat.vbs
windows脚本调试howto的方法
注册表的禁用与解锁方法集合

VBScript 中的 vbs中Empty和Null的区别


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 48 ::
收藏到网摘: n/a

empty关键字指用于指明未初始化的变量值,与NULL不同
NULL关键字指用于指明变量包含的数据无效,与empty不同
实例:
dim p
'此时,
isempty(p) 为 true
isNull(p) 为 null
再例如,在在数据库里读出记录的一个的某个字段ppp值是 null ,该字段没有数据
p=rs("ppp")
此时 isNull(p)=true
再说一个容易模糊的东东(可能也是大家费解的地方)
vbs 在没有option explicit时允许不声明变量就使用变量赋值
如 没有dim p 而直接
p="aaa" 第一次遇上时就会隐式的去定义变量p,可能在这儿产生费解,
-------------
其一:
dim p
isempty(p) 为 true
isNull(p) 为 false
显示定义了变量
---------------
其二:
isempty(p) 为 true
isNull(p) 为 false
必须在没有强制声明option explicit的前提下,否则程序不允许继续运行
隐式的定义变量,隐式定义发生在第一次对变量的使用
当没有显式的dim p时,第一次使用p 时就会实际的 运行机制==>
isempty(p)
(搜索函数作用域,没有定义,再搜索全局作用域,也没定义!!ok 先定义一下 dim p)
然后再
isempty(p)
实际就是
isempty(p)
--->
( p ? ----> no dim p ----> dim p )
---->
isEmpty(p)
isNull(p)
所以程序的处理结果 isNull(p)==false 而不是 true
null 不太好抓住它,怎么判断他?
-------
p=null
isNull(p)=true
现在奇怪,怎么p是初始化了,怎么又isNull(p)=true,因为发生在将 null 赋给 p,用 p变量代表不存在的数据
更明确的说,此时用“啥也没有的东西”由p来表示
--------
那什么时候才有isnull 为 true 哩?
例如在发生数据库对象数据调用时有出现,数据库的列允许 null
(更糟糕的是!!SQL server2000里的中文翻译null此时又称其叫“空值”,糊涂,所有原因发生在翻译上,所以要多用,才能理解empty,null真正的区别,不要在汉字翻译上去混淆,而且不同的语言对null empty的处理有有些差别)
“真空”可以叫empty
而null 连“真空”也没有
这本身是两个很抽象的概念!!
再举一个例子以加深Null 和Empty 的认识
如下有两个表,A表有三个记录,均有实际数据,B表有两个记录,第二个记录“B字段1”
是空字符;A表和B表的 aID bID 都是自动编号的字段,不允许填充Null
表A | 表B
__________________ |________________________________
aID A字段 | bID B字段
1 AAA1 | 1 BBB1
2 AAA2 | 2
3 AAA3 |
___________________________________________________
由aID和bID限定A left outer Join B 的结果
(select * From A left join B on A.aID=B.bID)
___________________________________________________
aID A字段1 bID B字段1
1 AAA1 1 BBB1
2 AAA2 2
2 AAA2 3 Null
___________________________________________________
分析上面的结果:
A left join B是强制B表匹配 A表输出记录集,不管B表的bid是否存在于A表中!
这样一来,B表的 bid=1 bid=2均匹配 A的 aID=1 aID=2,于是bID的相应数据原样出现在结果集中!
而记录号 bID=3 的记录在 B表不存在,有于要求强制匹配入联合结果集,此时基于on A.aid=B.bID 的条件,就用 B.bid=A.aID 出现在B表的联合输出结果列,而“B字段1”的
第三个记录不存在,此时联合结果集中就只能是标识为 null ---//不存在的数据//
而记录2的空字符则继续填充为空字符号
通过这个例子咳一看到 null 使用上的真正含义
空字符在数据中,相当于有一个空的座位
而null 就连这个空的座位也没有
再例:
1:AAA 2: BBB 3: 4:DD ' 3: 的地方是Empty
1:AAA 2:BBB 4:DD '连标明座位号的3: 都没有,那儿就是一个null