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 => ...)(箭头函数)

IE7 中的占位符

使用反应延迟加载时在 Edge 上出现 SCRIPT1028 错误

从 IFRAME IE11 调用父 JavaScript

IE11 上的 VueJS 错误 - SCRIPT1004: 预期为 ';'