vbs中Empty和Null的區(qū)別
更新時間:2007年03月28日 00:00:00 作者:
empty關鍵字指用于指明未初始化的變量值,與NULL不同
NULL關鍵字指用于指明變量包含的數(shù)據(jù)無效,與empty不同
實例:
dim p
'此時,
isempty(p) 為 true
isNull(p) 為 null
再例如,在在數(shù)據(jù)庫里讀出記錄的一個的某個字段ppp值是 null ,該字段沒有數(shù)據(jù)
p=rs("ppp")
此時 isNull(p)=true
再說一個容易模糊的東東(可能也是大家費解的地方)
vbs 在沒有option explicit時允許不聲明變量就使用變量賦值
如 沒有dim p 而直接
p="aaa" 第一次遇上時就會隱式的去定義變量p,可能在這兒產(chǎn)生費解,
-------------
其一:
dim p
isempty(p) 為 true
isNull(p) 為 false
顯示定義了變量
---------------
其二:
isempty(p) 為 true
isNull(p) 為 false
必須在沒有強制聲明option explicit的前提下,否則程序不允許繼續(xù)運行
隱式的定義變量,隱式定義發(fā)生在第一次對變量的使用
當沒有顯式的dim p時,第一次使用p 時就會實際的 運行機制==>
isempty(p)
(搜索函數(shù)作用域,沒有定義,再搜索全局作用域,也沒定義??!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
現(xiàn)在奇怪,怎么p是初始化了,怎么又isNull(p)=true,因為發(fā)生在將 null 賦給 p,用 p變量代表不存在的數(shù)據(jù)
更明確的說,此時用“啥也沒有的東西”由p來表示
--------
那什么時候才有isnull 為 true 哩?
例如在發(fā)生數(shù)據(jù)庫對象數(shù)據(jù)調(diào)用時有出現(xiàn),數(shù)據(jù)庫的列允許 null
(更糟糕的是??!SQL server2000里的中文翻譯null此時又稱其叫“空值”,糊涂,所有原因發(fā)生在翻譯上,所以要多用,才能理解empty,null真正的區(qū)別,不要在漢字翻譯上去混淆,而且不同的語言對null empty的處理有有些差別)
“真空”可以叫empty
而null 連“真空”也沒有
這本身是兩個很抽象的概念??!
再舉一個例子以加深Null 和Empty 的認識
如下有兩個表,A表有三個記錄,均有實際數(shù)據(jù),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的相應數(shù)據(jù)原樣出現(xiàn)在結果集中!
而記錄號 bID=3 的記錄在 B表不存在,有于要求強制匹配入聯(lián)合結果集,此時基于on A.aid=B.bID 的條件,就用 B.bid=A.aID 出現(xiàn)在B表的聯(lián)合輸出結果列,而“B字段1”的
第三個記錄不存在,此時聯(lián)合結果集中就只能是標識為 null ---//不存在的數(shù)據(jù)//
而記錄2的空字符則繼續(xù)填充為空字符號
通過這個例子咳一看到 null 使用上的真正含義
空字符在數(shù)據(jù)中,相當于有一個空的座位
而null 就連這個空的座位也沒有
再例:
1:AAA 2: BBB 3: 4:DD ' 3: 的地方是Empty
1:AAA 2:BBB 4:DD '連標明座位號的3: 都沒有,那兒就是一個null
NULL關鍵字指用于指明變量包含的數(shù)據(jù)無效,與empty不同
實例:
dim p
'此時,
isempty(p) 為 true
isNull(p) 為 null
再例如,在在數(shù)據(jù)庫里讀出記錄的一個的某個字段ppp值是 null ,該字段沒有數(shù)據(jù)
p=rs("ppp")
此時 isNull(p)=true
再說一個容易模糊的東東(可能也是大家費解的地方)
vbs 在沒有option explicit時允許不聲明變量就使用變量賦值
如 沒有dim p 而直接
p="aaa" 第一次遇上時就會隱式的去定義變量p,可能在這兒產(chǎn)生費解,
-------------
其一:
dim p
isempty(p) 為 true
isNull(p) 為 false
顯示定義了變量
---------------
其二:
isempty(p) 為 true
isNull(p) 為 false
必須在沒有強制聲明option explicit的前提下,否則程序不允許繼續(xù)運行
隱式的定義變量,隱式定義發(fā)生在第一次對變量的使用
當沒有顯式的dim p時,第一次使用p 時就會實際的 運行機制==>
isempty(p)
(搜索函數(shù)作用域,沒有定義,再搜索全局作用域,也沒定義??!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
現(xiàn)在奇怪,怎么p是初始化了,怎么又isNull(p)=true,因為發(fā)生在將 null 賦給 p,用 p變量代表不存在的數(shù)據(jù)
更明確的說,此時用“啥也沒有的東西”由p來表示
--------
那什么時候才有isnull 為 true 哩?
例如在發(fā)生數(shù)據(jù)庫對象數(shù)據(jù)調(diào)用時有出現(xiàn),數(shù)據(jù)庫的列允許 null
(更糟糕的是??!SQL server2000里的中文翻譯null此時又稱其叫“空值”,糊涂,所有原因發(fā)生在翻譯上,所以要多用,才能理解empty,null真正的區(qū)別,不要在漢字翻譯上去混淆,而且不同的語言對null empty的處理有有些差別)
“真空”可以叫empty
而null 連“真空”也沒有
這本身是兩個很抽象的概念??!
再舉一個例子以加深Null 和Empty 的認識
如下有兩個表,A表有三個記錄,均有實際數(shù)據(jù),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的相應數(shù)據(jù)原樣出現(xiàn)在結果集中!
而記錄號 bID=3 的記錄在 B表不存在,有于要求強制匹配入聯(lián)合結果集,此時基于on A.aid=B.bID 的條件,就用 B.bid=A.aID 出現(xiàn)在B表的聯(lián)合輸出結果列,而“B字段1”的
第三個記錄不存在,此時聯(lián)合結果集中就只能是標識為 null ---//不存在的數(shù)據(jù)//
而記錄2的空字符則繼續(xù)填充為空字符號
通過這個例子咳一看到 null 使用上的真正含義
空字符在數(shù)據(jù)中,相當于有一個空的座位
而null 就連這個空的座位也沒有
再例:
1:AAA 2: BBB 3: 4:DD ' 3: 的地方是Empty
1:AAA 2:BBB 4:DD '連標明座位號的3: 都沒有,那兒就是一個null
相關文章
VBScript教程 第三課VBScript數(shù)據(jù)類型
VBScript教程 第三課VBScript數(shù)據(jù)類型...2006-11-11
VBScript Enun Remote CMD Shell代碼
Enun Remote CMDShell,喜歡玩cmdshell的朋友可以參考下2013-07-07
關于vbs 生成靜態(tài)頁面過程中出現(xiàn)的問題
訪問某個aspx頁面,然后把服務器返回的頁面以filestream 的形式保存為html格式,接下來將介紹實現(xiàn)代碼2012-12-12
VBS教程:函數(shù)-DateValue 函數(shù)
VBS教程:函數(shù)-DateValue 函數(shù)...2006-11-11
vbs腳本和windows定時任務實現(xiàn)qq消息表情包定時發(fā)送功能
這篇文章主要介紹了vbs腳本和windows定時任務實現(xiàn)qq消息表情包定時發(fā)送,整個過程不用過多的程序運行,我們借助vbs腳本和windows定時任務去實現(xiàn)這一功能,需要的朋友可以參考下2022-01-01
VBS中CreateObject和WScript.CreateObject的區(qū)別介紹
很多VBS新手都很困惑CreateObject和WScript.CreateObject有什么區(qū)別,為什么一些代碼中用CreateObject,而另一些卻用WScript.CreateObject2013-05-05

