标题: 我为什么不用JScript?
作者: Demon
链接: https://demon.tw/programming/why-not-using-jscript.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
有网友在《利用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流行的时候,人类就已经登上了月球,可见如果不是把精力花在争论语言的孰优孰劣的话,就可以做很多事情。
赞赏微信赞赏支付宝赞赏
随机文章:
因为你是外星人~
个人还是顶下博主,VBS很好啊,
语言都是有优缺点的,算法才是王道。
希望大大能写一个vbs或asp的redis驱动,又或者提供一个想法。
我目前遇到的难题主要在中文上。
存入中文到redis里 实际它是以:\x64\x65\x6D\x6F\x6E\x2E\x74\x77的形式存入的。
但又不知道 如何以这种形式来存。
所以希望大大能有一篇这样的文章咯~
这种争论 没什么意义吧 能实现就可以了 就像争论汉语和英语哪个更完美 黄人和白人哪个更优越一样 变量 判断 循环 函数 对象与类 有什么不同
所有人类创造的东西都是为了解决问题。
jscript/vbscript貌似没有javascript+php流行啊
“虽然我想出了一种变通的方法,但是代码冗长并且效率低下。”
获取文件大小然后……?
为何不用while或者try?
当然,我是最坚定的VBS爱好者,JScript也间或有所涉猎。
如果以文本形式打开文件算不算?
var ado, s;
ado = new ActiveXObject(“ADODB.Stream”);
ado.Type = 2;
ado.Charset = “ASCII”;
ado.Open();
ado.LoadFromFile(“binary.dat”);
s = ado.ReadText();
// 请问如何处理?
for(i=0;i<s.length;i++)
{
WScript.Echo(s.substr(i,1).charCodeAt());
}
麻烦了,这样写就行:WScript.charCodeAt(i);
试了一下,遇到中文输出不对
看来还是VBS是微软亲生的
不要把VB与其他语言对立起来——话说Java和C/C++、Java和JavaScript,甚至C和C++的开发者也都经常互相看不顺眼。
VB最大的问题是,缺乏一个完整一致的模式。过程式也好,面向对象也好,基于对象和接口的封装也好,都缺乏贯彻始终的完整一致的模式。微软用.net全面替代了VB也可以印证了官方态度。
VBS为了继承VB/VBA的开发者,就更是迫不得已继承了许多VB的方式,所以方便有余,底蕴不足。按楼主说的,做几行的Script时候短平快,一旦想开发像样的东西的时候,就处处制肘。
JavaScript其实在语言本身,是一个脱离了Java语法的高度抽象代理模式。这一方面使得语言性能受限,但是也使得语言带有极大灵活性。从现在H5和Node的蓬勃生机就能印证它的良好架构带来的活力。
不过各个技术都有适合的地方,楼主的需求只是像Office的宏那样短小精悍的Script,不用结构,不要重用,那么或许VBS的确是最好的选择。
VBS 性能很多时候高于 JScript
您是以前在百度空间写过很多VBS文章的UMU?