使用VBScript和JScript编写WEB应用程序(二)
我心飞扬
6、数据类型
VBScript和JScript的数据类型差别比较大,JScript有6种数据类型:数值型、字符串型、对象型、
布尔型、null和undefined。VBScript虽然只有一种数据类型Variant,但其子类型比较丰富。特别
是其对数值类型的精细划分使得在进行精确的数值运算时显得比较放心。且配合第2条中所讲到的
格式化功能使数据处理更加得心应手。有关这方面的文档请参阅微软的MSDN。
7、运算符
在运算符方面VBScript和JScript也有一些差别:
例如,VBScript增加了用于字符串连接的算术运算符“&”,用于对象比较的“is”运算符等。
然而JScript提供了比VBScript多得多的运算符,例如递加递减运算符“++、--”、一组位运算符
及typeof、delete等杂项运算符等。有关此方面的信息MSDN中非常详细,在此不必复述。
8、字符串处理
VBScript和Javascript的字符串处理曾经也是网友们争论的焦点,它们对字符串的处理有着本质
的不同,我之所以将这部分单独提出来,也是想引发网友们作一些较为详细的讨论。
在VBScript中字符串只是一种简单的数据类型而已,并为之提供了非常丰富的字符串处理函数,
例如:
ASC,Chr,InStr,InStrRev,Join,LCase,UCase,Left,Right,Len,LTrim,RTrim,Trim,Mid,Replace,
Space,String,Split,StrComp,StrReverse
因此有很大一部分网友认为VBScript的字符串处理功能比JScript简捷、功能强大。
不过我不这么认为。简捷是有可能的,但谈到强大,我觉得JScript功能更为强大。在JScript中,
字符串不仅是一种数据类型,更是一类特殊的对象。作为对象的方法,他不仅提供了上述
VBScript中字符串函数的几乎所有功能,而且配合正则表达式能够提供更为强劲的功能。
一种典型的应用就是字符串的模糊搜索,看下面这个例子:
我想把一篇文章中的Chen0,Chen1,chenk,Chen99等可能的拼写方法替换成JoyASP:
var txt = myTextFile.ReadAll();
var re = /chenk?\d?\d?/gi;
txt = txt.replace(re,"JoyASP");
这种用法在不能精确地预知被处理的字符串时显得尤其有用。熟悉Unix,C,C++,Perl的网友可能
对正则表达式不会陌生,关于这方面的内容请查阅相关文章。
二、在同一个网页中同时使用两种语言
在同一个网页中可以使用不同的脚本编写语言。这样做有以下几个可能的原因:
A、在一个程序中充分利用各种语言的优点。
B、可能所面对的现有编码是用你不熟悉的语言来编写的。例如,DTC是用JScript编写的,而
你熟悉的语言却是VBScript。
大部分情况下,你可以在同一个网页中混合几种脚本语言并且它们相互之间能够配合得很好。
用一种语言编写的脚本可以调用用另外一种语言编写的程序并且能够共享全局变量。不过有时
候还是会出现一点小问题,现在就此说明一下。
1、当你从VBScript中调用一个JScript函数时,注意在调用过程中要有括号,即使这项函数不
要求设置参数也需如此。例如,一个调用应该像这样:
returnValue = call_JScript_Function()
如果你忘记了加括号,那么这个函数所返回的值就不是你所希望的值,而是一个包含了函数本
身的VBScript无法解释的对象。
2、服务器脚本的执行顺序
被<% %>定界符括入的命令被称为主脚本命令,主脚本命令按顺序运行,从头到尾。当然,你可
以在一个服务器脚本中定义一个可调用的程序(函数或者是子程序)。这样的话,如果需要就
可以随时调用它们。
所有的主脚本命令必须用同一种语言来编写,也就是在网页前面的<%@ LANGUAGE=xxxxx%>指示
中所指明的脚本语言。因此,在一个主脚本命令中你不能把几种脚本语言混合起来。 你也许会
说“等一等”。在理论上,把服务器脚本放到<script>单元中是绝对可能的。就像下例一样:
<%Response.Write("I Love joyASP!")%>
<SCRIPT language=VBScript RUNAT=Server>
Response.Write("I Love 我心飞扬, too.")
</SCRIPT>
但是,这样你就会被IIS ASP处理程序的执行顺序控制。例如,如果你建立了服务器脚本并且在
IIS 4.0中运行它,你会发现执行顺序可能是这样的:
1)非缺省语言的<SCRIPT>单元脚本
2)主脚本命令
3)缺省语言的<SCRIPT>单元脚本
以上的顺序在很大程度上依赖于ActiveX脚本语言引擎的载入顺序,同时IIS中的ASP处理程序可
能在将来会有所改变。因此,我不不大赞成按这种方式书写代码,建议你是只把<SCRIPT>单元
用于函数或者子程序,或是把它仅仅用于其他与执行顺序无关的编码。
3、客户端脚本块的顺序
当你在客户端把几种语言混合使用时,<SCRIPT>块在网页中出现的顺序非常重要,有时候会影
响到它们是否能正常工作。看看下面这个简单的例子,它是在一个VBScript脚本中调用一个用
JScript编写的函数:
<SCRIPT LANGUAGE="VBScript">
' 调用一个JScript function
her = "Lucy"
loveher = JSfuncLoveher(her)
document.write("绝密情报:" & loveher)
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
function JSfuncLoveher(arg){
return "White、飞鸟和Moslem都想泡" + her + "MM :-)";
}
</SCRIPT>
它不会起任何作用。说得更明白一点,document.write()会往网页中写入一个空的字符串。为
什么?很简单,在处理VBScript块时,下面的Java Script <SCRIPT>块还没有被读出来,没有
进行语法分析,因此网页不能使用它。当浏览器处理网页中的脚本块时,它是从上往下进行的。
在这个例子中,只需要调换一下脚本块的顺序就能够解决这个问题了。不过,事实上这类问题
并不那么常见,在大多数情况下,<SCRIPT>中包含的函数和子程序只有当整个网页被全部下载
下来并且所有的单元都可以使用之后才能够被调用。不过,你还是要记住,网页是按照一定的
顺序来处理的,不同语言的<SCRIPT>块是分别处理的。