好玩的vbs特色代碼第3/6頁
更新時間:2007年03月08日 00:00:00 作者:
vbs 實用秘籍幾則。
1,在客戶端的應(yīng)用:
要解瀏覽器對象模型,認(rèn)為alert,setTimeOut等是js的內(nèi)容是常見錯誤認(rèn)識,實際上那只是window對象的方法而已。
客戶端調(diào)用vbs函數(shù)要顯式聲明語言:onclick="vbs:函數(shù)名"
解決類似js的
對象.onclick=function(){}問題可以用GetRef函數(shù),
Set object.eventname = GetRef(procname)
2,認(rèn)為vbs沒有eval,escape等函數(shù)?
實際上vbs不僅有eval而且還有execute,execScript。試驗:execute "a=1+1"
<SCRIPT language="vbs" >
execute "for i=1 to 10 : alert i :next"
</SCRIPT>
甚至還可以用很短代碼”變態(tài)“的寫出:動態(tài)產(chǎn)生的n層嵌套的循環(huán),其他語言很難做到。
<SCRIPT LANGUAGE=vbs>
'10多行代碼實現(xiàn)n個數(shù)字全排列
dim n:n=4
dim S
dim w:w=0
for i=1 to n
S=S & "for i" & i & " =1 to n" & chr(13)
next
S=S & " if not("
for i=1 to n
for j=i to n
if i<>j then S=S & "i" & i & "=i" & j & " or "
next
next
S=left(S,len(S)-4) & ") then " & chr(13)
for i=1 to n
S=S & "document.write i" & i & chr(13)
next
S=S & "document.write " & chr(34) & "<br/>" & chr(34) & chr(13) & "end if" & chr(13)
w=w+1
for i=1 to n
S=S & "Next" & chr(13)
next
execScript S,"vbs"
</SCRIPT>
3,case的奇怪用法:
case 1,2可以表示兩種情況,而且case后面可以接變量或者表達(dá)式case a 或者case 1+1這樣用,這點(diǎn)非常靈活,C#和js的case語句是不允許的。
4,還有冒號和下劃線的用法,我相信這些可能是很多人不常用的。dim a:a=1
for y=0 to 9:for x=0 to 8
AllQiZi(x,y) =0
next:next
適當(dāng)減少代碼編輯行數(shù),好玩而已,不要到處亂用,不過還真有一個哥們把所有代碼寫在一行。
5,鋸齒數(shù)組
dim Arr,arrX(),arrY():redim arrX(0):redim arrY(0)
Arr=Array(arrX,arrY)
這個Arr就是數(shù)組的數(shù)組,里面的內(nèi)容可以是任何變量,任意長短混合的,object也可以!
Arr(0)(0)實際上就是arrX(0)
6, 對上面的arrX 數(shù)組增加新項,在js數(shù)組里直接可以增加,還可以排序,因為js沒有真正的數(shù)組!真正的數(shù)組是不可以在不重新定義的情況下增加項目的。vbs的數(shù)組更接近于真正的數(shù)組,運(yùn)行速度比js的數(shù)組對象要快很多。但是越接近低層,用起來也許越不方便。
addArr arrX ,1
addArr arrX ,2
sub addArr(byref Arr,newItem)'一維數(shù)組增加一項
if IsEmpty(Arr(0)) then
Arr(0)=newItem
exit sub
else
dim bound:bound=ubound(Arr)
Redim Preserve Arr(bound+1)
Arr(bound+1)=newItem
end if
end sub
以下是對比js和vbs數(shù)組的執(zhí)行速度,只是賦值而已,差別巨大!
<SCRIPT LANGUAGE=javascript>
var jstest = 10 * 10000 ;
var jsArr = new Array(jstest) ;
var jsBegin = new Date().getTime();
for(i=0;i<jstest;i++)
{
jsArr[i]="任何東西" ;
}
var jsEnd = new Date().getTime();
document.write("js做完這件事需要" + (jsEnd - jsBegin) + "豪秒<br/>");
</SCRIPT>
<SCRIPT LANGUAGE=vbscript>
dim vbstest : vbstest = 10 * 10000
dim vbsArr() : redim vbsArr(vbstest)
dim vbsBegin : vbsBegin = Timer()
for j =0 to vbstest
vbsArr(j) = "任何東西"
next
dim vbsEnd : vbsEnd = Timer()
document.write "vbs做完這件事需要" & (vbsEnd - vbsBegin) * 1000 & "豪秒<br/>"
</SCRIPT>
js做完這件事需要2329豪秒
vbs做完這件事需要108.8867豪秒
但是js數(shù)組有sort方法,這是及其方便的,vbs只能自己寫排序了,冒泡?太土了吧。
sub sortA(Arr)
'輸入:Arr時間結(jié)果數(shù)組array
'堆排序,復(fù)雜度n*log(n)/log(2),如果8個數(shù)就是24次,如果用冒泡是8^2=64次
dim n,i,L,ir,rArr,j
n = ubound(Arr)
L = int(n / 2)+1
ir = n
do
if L > 1 then
L = L - 1
rArr = Arr(L)
else
rArr = Arr(ir)
Arr(ir) = Arr(1)
ir = ir - 1
if ir = 1 then
Arr(1) = rArr
exit sub
end if
end if
i = L
j = 2 * L
while j <= ir
if j < ir then
if Arr(j) < Arr(j + 1) then j = j + 1
end if
if rArr < Arr(j) then
Arr(i) = Arr(j)
i = j
j = 2 * j
else
j = ir + 1
end if
wend
Arr(i) = rArr
loop
end sub
相關(guān)文章
使用 Iisext.vbs 啟用Web服務(wù)擴(kuò)展文件的方法
這篇文章主要介紹了如何使用 iisext.vbs 在本地或遠(yuǎn)程計算機(jī)上啟用 Web 服務(wù)擴(kuò)展文件,需要的朋友可以參考下2014-07-07VBS實現(xiàn)將當(dāng)前時間轉(zhuǎn)換成UTC時間
這篇文章主要介紹了VBS實現(xiàn)將當(dāng)前時間轉(zhuǎn)換成UTC時間,十分的簡單實用,需要的朋友可以參考下2015-05-05vbs中關(guān)于計算機(jī)名的相關(guān)討論
vbs中關(guān)于計算機(jī)名的相關(guān)討論...2007-03-03vbs實現(xiàn)只復(fù)制比目標(biāo)文件更新的文件
有時候我們需要時候備份一些文件,只有當(dāng)這個文件被修改了并且不是空的時候才復(fù)制2014-04-04用vbs腳本獲取網(wǎng)卡MAC,CPUID,硬盤序列號的實現(xiàn)代碼
這篇文章主要介紹了用vbs腳本獲取網(wǎng)卡MAC,CPUID,硬盤序列號的實現(xiàn)代碼,需要的朋友可以參考下2019-04-04