【问题标题】:JavaScript version used by the Windows Scripting HostWindows 脚本宿主使用的 JavaScript 版本
【发布时间】:2018-03-24 18:12:31
【问题描述】:

多年来,我一直在 Windows 脚本中使用 JavaScript,包括 .JS 文件和 .WSF 文件,但我发现有些方法在我将它们放入外部执行的脚本时无法识别在网页上的脚本中有效的网页。我知道不同的浏览器支持不同版本的 JavaScript,MSDN 有一个页面描述了 Internet Explorer 和 Edge 浏览器版本支持哪些功能和方法:

https://docs.microsoft.com/en-us/scripting/javascript/reference/javascript-version-information

但它没有说明 Windows 脚本支持哪些方法。

Windows 脚本支持的 JavaScript 版本是否取决于 Windows 版本、计算机上安装的 Internet Explorer 版本或其他一些因素或因素的组合? JavaScript 程序内部有没有办法在执行时检测正在使用的 JavaScript 版本?

【问题讨论】:

  • 您是否尝试在 Windows 脚本中实现某种功能检测?不知道为什么需要 JavaScript 版本。
  • 它实际上不是 JavaScript,它是 Microsoft 的实现,称为 jscript
  • 我知道 ECMAScript 的 Microsoft 实现有时称为 JScript,但 MSDN 和 Microsoft 文档的许多其他部分可以互换使用术语 JScript 和 JavaScript。问题是当使用 Windows Scripting Host 处理 .JS 源文件和 .WSF 中的 JScript 部分时,如何确定支持 ECMAScript 的哪些功能。 Microsoft 文档没有对此进行解释。我上面帖子中的链接介绍了 IE6、IE7、IE8、IE9、IE10、IE11、Edge 和 Windows 应用商店应用程序中的功能。它没有提到 Windows 脚本宿主。
  • 最初促使我提出这个问题的原因是当我尝试在独立(非 HTML).JS 文件中使用方法 Date.now() 时。 Microsoft 文档说它在 IE9-IE11、Edge 和 Windows Store 应用程序中受支持。 IE6、IE7、IE8 或任何“Quirks”都不支持它。在 64 位 Windows 7 计算机上运行的 Windows 脚本主机显然不支持它,即使它在同一台计算机上的 IE11 中的 HTML 文件中的 .JS 脚本中运行。我想知道 Windows Scripting Host 支持或不支持 ECMAScript 的其他哪些功能,以及是什么决定了它。
  • @JDMorganArkansas 这是因为在标准浏览器中(包括 Edge) JavaScript 是事实上的选择,而 JScript 和扩展的 VBScript 正慢慢被扫到地毯下。 WSH 只是另一个主机,就像 IE 是主机一样,功能集是相同的,所以如果它说“仅在 Internet Explorer 中支持”,您可以安全地在 WSH 中使用它。

标签: windows scripting wsh jscript


【解决方案1】:

它是 common mistake to make,但 Windows Scripting Host 支持 VBScript 和 Microsoft 自己的基于 ECMAScript 标准的称为 JScript 的 JavaScript 实现。事实上,它可以通过对 Active Scripting 语言的支持来支持多种脚本实现。

虽然它与 JavaScript 有许多相似之处,但它们并不相同(是的,它们来自同一个地方,但这并不意味着它们之后没有分歧)。当您在 Internet 浏览器之外使用 .js 文件时(支持 Active Scripting 的唯一浏览器是 Internet Explorer 的早期版本,在 Edge 之前)它们是使用主机程序执行的,在这种情况下是 Windows 脚本主持人。这也适用于使用 .wsf 文件。

编辑:我还更新了 标签信息,因为它指出 可以使用,这是不正确的,为什么围绕这个主题会出现如此多的混乱。


有用的链接

【讨论】:

  • 见上文。我还知道 Windows Scripting Host 支持其他脚本语言,例如 VBScript。这并不能真正回答我提出的问题,即如何确定特定计算机上的 Windows Scripting Host 在特定时间支持称为 JScript(通常称为 JavaScript)的 ECMAScript 实现的哪些部分。
  • @JDMorganArkansas 在这种情况下为什么要标记它 JavaScript?这样做只会导致更多的混乱。事实上,JScript 上次更新是在 IE 9 中,所以不要指望最新的 JavaScript 功能可以工作。至于它支持和不支持的最终列表,我怀疑公共领域中是否存在这样的列表。 Wikipedia has quite a comprehensive list 如果有帮助,哪个版本的 JScript 匹配“相似”版本的 JavaScript?
  • 感谢您的多次澄清。这很有帮助。我将更仔细地查看您提供的链接的文档。我从 Wikipedia 注意到 Windows Script Host 可以托管除默认 JScript 和 VBScript 之外的其他脚本语言,包括一些似乎实现更高级版本的 ECMAScript 的脚本语言。我可以使用 Date.now() 的解决方法来满足我当前的需求,但是如果我需要 WSH 中 ECMAScript 的一些更高级的功能,我可能会考虑调用其他脚本引擎。
【解决方案2】:

大约 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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多