技术开发 频道

弃VBScript而选Jscript的八大理由

理由五:JScript的正则表达式处理能力更强

    正则表达式是JScript本身的一个功能;它们被内置在语言的语法中。而VBScript在版本5以前并不支持正则表达式,因此,它的语法相对来说非常麻烦和糟糕。举个例子来说,如果你想使用正则表达式来检查一个输入的文本是否是电子邮件格式。在VBScript中你不得不使用New这个关键字和Set声明来创建一个RegExp对象,然后配置它的属性来进行搜索。下面是一个例子:
Address = "foo@bar.com" Set RE = New RegExp With RE .Pattern = "\w+@\w+\.\w+" .IgnoreCase = True End With Result = RE.Test(Address)
相同的JScript代码则显得更简洁。

var address = "foo@bar.com"; var RE = /\w+@\w+\.\w+/gi; var result = RE.test(address);
    上面的第二行代码创建了一个RegExp对象。如果你在代码被执行之前知道模式的话,/表达式/语法是描述一个正则表达式模式的很方便的方法。作为一种选择,你可以使用new操作来创建一个RegExp对象,如下面所示:

var address = "foo@bar.com"; var RE = new RegExp("\\w+@\\w+\\.\\w+", "i"); var result = RE.test(address);
    如果你想在运行时描述一个正则表达式模式的话,这个语法是非常有用的。此外,JScript的RegExp对象具有一个编译方法,当重复使用它们是可以提高性能,比如在循环中使用它的时候。

理由六:JScript的数组要强大很多

    数组一直是VBScript的心头之痛。它们非常不灵活,只有在这个数组在定义的时候没有指定一个固定的元素数量的时候,它才可以被重新指定大小(例如,如果你定义了一个具有五个元素的数组,那么你不能增加第六个元素到数组中)举个例子来说,看一下下面的VBScript代码:

Dim MyArray(4) ' 声明一个数组可以最多包含5个元素
MyArray(5) = "Test" ' 引发错误:这个数组只能容纳5个元素 elements
ReDim MyArray(6) ' 同样引发错误:数组已被定义成固定大小

    在VBScript中,你可以创建一个动态的可以修改大小的数组,但是这是一个两步过程;你不得不首先声明一个数组,然后你不得不对它重新指定大小,以来指定正确的元素数量:

Dim MyArray()
ReDim MyArray(5) '重新定义数组大小
MyArray(5) = "Test" '给数组的第六个元素赋值

    如果你想使用一个VBScript数组来容纳从一个循环中读出的变化数量的元素(例如一个从FileSystemObject的文件集合得到的File对象数组),你将需要定时的使用带有Preserve关键字的ReDim声明来重新定义这个数组的大小。(考虑到性能的原因,你可能不想在每一次循环完成一次后使用ReDim。)

在JScript中,数组是一个对象类型,本质上是动态的,并提供了很多方法来操作它们。举个例子来说,push和pop方法用来追加元素到数组中和从数组中删除元素,在过程中自动调整数组的大小。JScript数组还有一个sort方法,来支持用户定义的排序功能。对于返回一个VBScript风格数组的ActiveX对象(JScript将这些称作SafeArrays或VBArrays)来说,这个数组对象有一个toArray方法来转换SafeArray数组为一个JScript数组。

    事实上,微软似乎创建了脚本运行时的Dictionary对象来克服这个VBScript数组数据类型的限制。因为我一直在使用JScript编写代码,我发现了这一点,只有一种情况下我需要Dictonary对象:从一个JScript数组返回一个SafeArray对象(奇怪的是,这个功能并不是内置支持的)。如下例所示:
function toSafeArray(arrayObject) { var dict = new ActiveXObject("Scripting.Dictionary"); for (var n = 0; n < arrayObject.length; n++) dict.Add(arrayObject[n], ""); return dict.Keys(); // Keys返回一个SafeArray }
    当使用ActiveX组件的时候,有时候需要SafeArrays,我使用了一个与上面的类似的函数,来转换一个JScript数组为SafeArray。
0
相关文章