我编写JSCript并使用WindowsScriptHost运行它。但是,似乎缺少Array.forEach()。
['a', 'b'].forEach(function(e) {
WSH.Echo(e);
});
失败" test.js(66,2)Microsoft JScript运行时错误:对象不支持此属性或方法"。
这不对吗?它真的缺少Array.forEach()吗?我真的必须使用其中一个for-loop-variants?
答案 0 :(得分:3)
JScript使用JavaScript功能集as it existed in IE8。即使在Windows 10中,Windows脚本宿主也仅限于JScript 5.7。这个MSDN documentation解释了:
从JScript 5.8开始,默认情况下,JScript脚本引擎支持5.7版本中存在的语言功能集。这是为了保持与早期版本引擎的兼容性。要使用版本5.8的完整语言功能集,Windows脚本界面主机必须调用IActiveScriptProperty::SetProperty。
...最终意味着,由于cscript.exe
和wscript.exe
没有允许您调用该方法的开关,Microsoft建议您编写自己的脚本主机来解锁Chakra引擎。
但是有一种解决方法。您可以调用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]);
});
输出:
快速棕狐 跳过懒狗。
还有一些其他方法demonstrated in this answer - JSON.parse()
,String.trim()
和Array.indexOf()
。