我已经在.JS文件和.WSF文件中使用Windows Scripting中的JavaScript了好几年了,但我发现当我把它们放在外面执行的脚本中时,有些方法无法识别在网页上的脚本中有效的网页。我知道不同的浏览器支持不同版本的JavaScript,MSDN有一个页面描述了哪些Internet Explorer和Edge浏览器版本支持哪些功能和方法:
https://docs.microsoft.com/en-us/scripting/javascript/reference/javascript-version-information
但它没有说明Windows Scripting支持哪些方法。
Windows Scripting中支持的JavaScript版本是否取决于Windows的版本,计算机上安装的Internet Explorer版本或某些其他因素或因素组合? JavaScript程序中是否有一种方法可以检测执行时使用的JavaScript版本?
答案 0 :(得分:1)
它是一个common mistake to make,但Windows Scripting Host支持VBScript和微软拥有基于ECMAScript标准的名为JScript的JavaScript实现。实际上,它可以通过支持Active Scripting语言来支持许多脚本实现。
虽然它与JavaScript有许多相似之处,但它们并不相同(是的,它们来自同一个地方,但这并不意味着它们之后没有分歧)。当您在Internet浏览器之外使用.js文件时(唯一支持Active Scripting的浏览器是早期版本的IE,pre Edge)它们是使用主机程序执行的,在本例中是Windows Scripting Host。这在使用.wsf文件时也适用。
编辑:我还更新了wsh代码信息,因为它可以使用javascript,这是不正确的,为什么围绕这个主题会出现如此多的混淆。
答案 1 :(得分:0)
大约2年前,我开始认真研究Jscript。根据我的经验
这是当我在2012年首次开始编程时JS的状态。此时,以上所有功能将成为EcmaScript 6中的下一个大功能。
所以我有根据的猜测是EcmaScript 5。
您仍然可以使用传统的ES5语法创建类。
function FunctionButClass(a,b){
this.Square = function(){ return a*b; }
}
var squared = new FunctionButClass(4,4).Square();
原型语法也能正常工作。
function PrototypeSyntax(a,b){
this.a = a;
this.b = b;
}
PrototypeSyntax.prototype.Square = function(){
return this.a*this.b;
}
还请注意,缺少DOM的全部内容,因此document.getElementById("")
的所有内容都不会通过WScript.CreateObject("")
note2:DOM通过.HTA文件在Jscript中可用。但是请记住
WScript.CrateObject("Scripting.FilesSystemObject");
现在变为:
new ActiveXObject("Scripting.FilesSystemObject")