IE 11 Script1028 在函数内传播,尝试了 Array.prototype.push.apply
Posted
技术标签:
【中文标题】IE 11 Script1028 在函数内传播,尝试了 Array.prototype.push.apply【英文标题】:IE 11 Script1028 on spread within function, tried Array.prototype.push.apply 【发布时间】:2021-04-13 06:42:24 【问题描述】:我有一个在 Chrome、FF 和 Edge 中完美运行的 .NET 应用程序。我被要求改造我们的一些 javascript 以在 IE 11 中工作。我已经将我的兼容性更改为 <META http-equiv="X-UA-Compatible" content="IE=11" />
。
我收到 Script1028 关于花括号内特定扩展函数的信息。我已经运行了几次搜索并尝试以各种形式添加 Array.prototype.push.apply 'fix' 以替换 IE 11 的扩展函数。我已经通过 Babeljs.io 运行了代码,但似乎没有知道如何替换传播函数。
这是正在破坏的代码:
createDataTree = function createDataTree(dataset)
//console.log(bookmarkfolders);
var hashTable = Object.create(null);
dataset.forEach(function (aData)
return hashTable[aData.DroppableID] = ...aData,
children: []
;
);
var dataTree = [];
dataset.forEach(function (aData)
if (aData.parentID != "") hashTable[aData.parentID].children.push(hashTable[aData.DroppableID]);
else dataTree.push(hashTable[aData.DroppableID]);
);
return dataTree;
我希望我缺少其中的一个简单部分,并且有人可以快速向我展示如何改进此扩展函数以兼容 IE 11。提前致谢。
【问题讨论】:
babeljs.io 我给你做了一个sn-p。请在minimal reproducible example 中添加数据集示例 - 这是对象传播,而不是数组传播,所以push
不太合适。你想要Object.assign
。见MDN's article on the spread syntax
你可以使用Object.assign(, aData, children: [] )
@epascarello - 我在我的 OP 中注意到我使用了 babeljs.io。 babeljs.io 中是否有一些我错过了转换传播语法的设置?不想纠缠,我只是不知道去哪里看,我可能错过了一些步骤。我使用了 ES2015 并做出了反应。
【参考方案1】:
你如何包含 babel 来转译你的代码?
object rest/spread properties 是 IE 不支持的 ECMAScript 2018 的一部分。你可以使用像 Babel 这样的编译器。通过运行安装 @babel/plugin-proposal-object-rest-spread:
npm install --save-dev @babel/plugin-proposal-object-rest-spread
然后根据usage将其包含为插件。
您也可以参考this thread和this thread有类似问题的。
另一个选项是你可以定义你自己的函数,你可以在这个线程中引用accepted answer。
【讨论】:
以上是关于IE 11 Script1028 在函数内传播,尝试了 Array.prototype.push.apply的主要内容,如果未能解决你的问题,请参考以下文章
jquery.easyui.min.js, 行82 字符5SCRIPT1028: 缺少标识符字符串或数字
IE 11 Script1002 Array.Filter(x => ...)(箭头函数)