關於script的dictionary對象,其實我想一開始ms是藉鑑了python之類的動態腳本語言的,而且是面對客戶端開發的關於這一點可以參考wrox的asp程式設計師參考手冊裡第137頁裡如果在session層級保存一個dictionary物件會降低系統的效能,而在application層級保存一個dictionary物件會導致web伺服器崩潰,關於這個就不在多說了。
現在我們要考慮的是dictionary物件在單頁的時候,有哪些設計時的缺陷:
大家可以這麼試試
set rs=server.createobject(adodb.recordset)
sql=select * from table
rs.open sql,conn,1,3
set ttt=server.createobject(scripting.dictionary)
ttt.add xxx,rs(field)
set rs=nothing
liu=ttt(xxx) '當你這麼做的時候會發現一件什麼事呢? asp頁會告訴你發生意外! ! !這個就很令人詬異了,什麼是意外呢?很難說,後來經過我反覆的測試發現是因為不能把rs(field)的值直接給dictionary對象,經過反覆研究得出的結論是如下的:dictionry是把rs(field)的內存地址給儲存了,這樣的話,我剛才寫的那個無疑是一種災難,解決方法是把這個rs(field)放到一個變數裡就可以解決了,但是dictionary物件難道不可以保存一個被nothing過的物件麼?這個就是一個很大的疑問了,所以我又寫了這麼一段程序,大家可以保存成try.htm看看效果的
<script language='vbscript'>
set ttt=createobject(scripting.dictionary)
ttt.add liu,uuu
set ddd=createobject(scripting.dictionary)
ddd.add ppp,ttt
set ttt=nothing
bbb=ddd(ppp)(liu)
alert(bbb)
</script>
結果是什麼?你會發現一段alert了uuu說明是沒有問題的,這就說明dictionary物件其實是把另一個
dictionary物件整個clone進來了,這就更驗證了wrox的書中寫的,dictionary物件在ms開發的時候其
實是針對客戶端的,這種說法了
還有數組與dictionary合用的程式碼也可以給大家看的
<script language='vbscript'>
i=1
picname=(xxx)
str=set & pic_ & i & =createobject( & & scripting.dictionary & & )
execute(str)
str=pic_ & i & .add & & picname & & , & & picname &
execute(str)
dim ttt()
redim ttt(5)
ttt(0)=uuu
pic_1.add item,ttt
liu=pic_1(picname)
set pic_2=createobject(scripting.dictionary)
erase ttt
redim ttt(5)
ttt(0)=iii
nnn=pic_1(item)(0)
pic_2.add rrr,ttt
zzz=pic_2(rrr)(0)
alert(liu)
alert(nnn)
alert(zzz)
</script>