我为什么不用JScript?

标签: , , ,

有网友在《利用WMI打造完美“三无”后门-The Core》中留言:

小建议, 楼主 所写vbs 完全可用 jscript 替代
js 轻易 超越 vbs 完成 很多高级应用
vbs 用到最后, 很反感它,
代码不能重用, 啰嗦, 不灵活, 开发效率低下 ….等

微软 故意不推广 jscript
很多的脚本例子 均用vbs 展示例子
估计很多VBSer 用熟练vbs到最后, 转向js时发现, 自己的青春 被M$故意浪费了
走了很多的弯路 在vbs上

首先声明一下这里的JScript指的是在Windows脚本宿主(Windows Script Host,即wscript.exe和cscript.exe)中运行的JScript,不要和网页客户端脚本JavaScript混为一谈。

微软当年推出VBScript的一个初衷是与JavaScript竞争网页客户端脚本,但是很显然VBScript完败了,当今的WEB是JavaScript的天下,傻逼才用IE Only的VBScript开发网页。那位网友说的“估计很多VBSer 用熟练vbs到最后, 转向js时发现, 自己的青春 被M$故意浪费了”大概说的就是那些曾经用VBScript开发网页的人吧。

但是在Windows Script Host中,我不觉得VBScript比JScript差得了多少。我不曾见过Windows脚本宿主的高级应用,更不知道那位网友用轻易超越VBS的JS写了哪些高级应用,但是他所说的“代码不能重用, 啰嗦, 不灵活, 开发效率低下”,我是不敢苟同的。

代码不能重用

维基百科中说:“所谓的代码复用,本质上就是对曾经编写过的代码的一部分甚至全部重新加以利用,从而构建新的程序。”比如说我曾经写过一个VBS解析JSON的VbsJson类,下次我想解析JSON数据的时候加以利用,这难道不算代码重用?如果这样不算,怎样才算代码可以重用?

啰嗦

在WSH中经常要做的一件事情是遍历集合,在VBScript中使用For Next循环即可轻松实现,而JScript的for in循环却不支持集合,我们不得不另外构造一个Enumerator对象:

'By Demon
'https://demon.tw
Dim fso, d
Set fso = CreateObject("Scripting.FileSystemObject")
For Each d In fso.Drives
    WScript.Echo d.DriveLetter
Next
// By Demon
// https://demon.tw
var fso, e, x;
fso = new ActiveXObject("Scripting.FileSystemObject");
e = new Enumerator(fso.Drives);
for (; !e.atEnd(); e.moveNext())
{
    x = e.item();
    WScript.Echo(x.DriveLetter);
}

哪个比较啰嗦?

不灵活

VBScript的确在很多方面不如JScript灵活,比如自定义函数不支持变长参数和默认参数,循环体中没有continue,为对象赋值需要用Set关键字等等,但是在处理字节数组Byte()时JScript就显得力不从心了:

'By Demon
'https://demon.tw
Dim ado, s, i
Set ado = CreateObject("ADODB.Stream")
ado.Type = 1
ado.Open
ado.LoadFromFile "binary.dat"
s = ado.Read
For i = 1 To LenB(s)
    WScript.Echo AscB(MidB(s, i, 1))
Next
// By Demon
// https://demon.tw
var ado, s;
ado = new ActiveXObject("ADODB.Stream");
ado.Type = 1;
ado.Open();
ado.LoadFromFile("binary.dat");
s = ado.Read();
// 请问如何处理?

虽然我想出了一种变通的方法,但是代码冗长并且效率低下。

开发效率低下

你可以说我上面写的都是强词夺理,但是就开发效率而言,VBScript绝对比JScript要高。因为VBScript有编辑神器——VbsEdit,而在网上我找不到一个能与之匹敌的JScript编辑器。不要向我推荐Aptana之类的JavaScript编辑器,前面强调过了,本文说的是JScript,那些不能自动完成COM对象的属性和方法的JavaScript编辑器有何用?

找不到像样的编辑器,这是我不用JScript最主要的原因,我没有那么多时间一个字母一个字母的敲。我曾经尝试过自己开发一个JScript编辑器,但是由于JScript是动态的弱类型语言,想静态分析每个变量的类型十分的困难,远远超出我的能力范围,只好作罢。当然,那位网友说不定早就已经开发出了超越VbsEdit的JScript编辑器,所以才说VBScript开发效率低下。

结语

VB一族(VB、VB.NET、VBA、VBS)似乎从诞生之日起就受到人们的鄙夷和唾弃,被认为是初学者的玩具;而那些C一族(C、C++、C#、Java,这里仅从语法上分类)似乎就有天生的优越感,特别是C++,更是不可一世。

讨论哪种语言最好是没有意义的,事实上,你可以用任何语言写出糟糕的代码。早在COBOL流行的时候,人类就已经登上了月球,可见如果不是把精力花在争论语言的孰优孰劣的话,就可以做很多事情。

赞赏

微信赞赏支付宝赞赏

随机文章:

  1. C语言中的round函数
  2. IsTextUnicode函数
  3. 此版本之魔兽争霸III需要特定语言版本之Windows
  4. VBScript编译器(VBS也疯狂)
  5. C语言中NULL和NUL的区别

15 条评论 发表在“我为什么不用JScript?”上

  1. 淡月清风说道:

    Visual Studio 2003以上的版本都是强大的JScript IDE。
    支持单步调试,支持COM组件的自动完成。

    参见: http://www.qingfengju.com/index.asp?id=389

    • 叶子说道:

      链接无法使用打开了,请问如何用vs编写并调试js?我直接用vs打开js文件并没有com自动完成,也不支持调试运行

  2. 淡月清风说道:

    服务器被攻击,换了一个域名:
    https://blog.qingfengju.com/index.asp?id=389

    现在用的VS2017,仍可以单部调试,但不能支持COM组件的自动完成。
    调试时可以看到对象的属性方法。

淡月清风 留下回复