vbs中Empty和Null的区别
程序员文章站
2022-03-20 14:13:14
empty关键字指用于指明未初始化的变量值,与null不同 null关键字指用于指明变量包含的数据无效,与empty不同 实例: dim p '此时, ...
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
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
推荐阅读
-
微信小程序事件对象中e.target和e.currentTarget的区别详解
-
javascript中apply、call和bind的使用区别
-
解析PHP中empty is_null和isset的测试
-
JavaScript中的toString()和toLocaleString()方法的区别
-
Oracle中sys和system的区别小结
-
MS Server和Oracle中对NULL处理的一些细节差异
-
浅析PHP中strlen和mb_strlen的区别
-
Yii中render和renderPartial的区别
-
jQuery中两种遍历$.each()和$().each()的区别
-
js中null与空字符串""的区别讲解