gpt4 book ai didi

jscript - JScript/WindowsScriptHost 是否缺少 Array.forEach()?

转载 作者:行者123 更新时间:2023-12-04 00:10:30 28 4
gpt4 key购买 nike

我编写 JSCript 并使用 WindowsScriptHost 运行它。但是,它似乎缺少 Array.forEach()。

['a', 'b'].forEach(function(e) {
WSH.Echo(e);
});

因“test.js(66, 2) Microsoft JScript 运行时错误:对象不支持此属性或方法”而失败。

这不是对的吗?它真的缺少 Array.forEach() 吗?我真的必须使用其中一种 for 循环变体吗?

最佳答案

JScript 使用 JavaScript 功能集 as it existed in IE8 .即使在 Windows 10 中,Windows Script Host 也仅限于 JScript 5.7。这MSDN documentation解释:

Starting with JScript 5.8, by default, the JScript scripting engine supports the language feature set as it existed in version 5.7. This is to maintain compatibility with the earlier versions of the engine. To use the complete language feature set of version 5.8, the Windows Script interface host has to invoke IActiveScriptProperty::SetProperty.

... 这最终意味着,由于 cscript.exewscript.exe 没有允许您调用该方法的开关,Microsoft 建议您编写自己的脚本主机解锁脉轮引擎。

不过,有一个解决方法。您可以调用 htmlfile COM 对象,强制它与 IE9(或 10、11 或 Edge)兼容,然后导入您想要的任何方法——包括 Array.forEach() 、JSON 方法等。这是一个简短的例子:

var htmlfile = WSH.CreateObject('htmlfile');
htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');

// And now you can use htmlfile.parentWindow to expose methods not
// natively supported by JScript 5.7.

Array.prototype.forEach = htmlfile.parentWindow.Array.prototype.forEach;
Object.keys = htmlfile.parentWindow.Object.keys;

htmlfile.close(); // no longer needed

// test object
var obj = {
"line1" : "The quick brown fox",
"line2" : "jumps over the lazy dog."
}

// test methods exposed from htmlfile
Object.keys(obj).forEach(function(key) {
WSH.Echo(obj[key]);
});

输出:

The quick brown fox
jumps over the lazy dog.

还有一些其他的方法demonstrated in this answer -- JSON.parse()String.trim()Array.indexOf()

关于jscript - JScript/WindowsScriptHost 是否缺少 Array.forEach()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497561/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com