internet-explorer-11 - 在 AJV 代码中发现传播运算符的 IE 11“预期标识符”错误
问题描述
在我的 Angular 6 应用程序中,我在 IE 11 中收到控制台错误,显示为“Script1010:”预期标识符“。常绿浏览器没有问题。
错误发生在第一个“。” 在扩展运算符函数中,在捆绑的 js 文件中标识为:
function(e,t,n){"use strict";function 1(...e){if(e.length>1)
{e[0]=e[0].slice(0,-1);const t=e.length-1;for(let n=1;n<t;++n)e[n]=e[n].slice(1,-1);return e[t]=e[t].slice(1),e.join("")}
在这行代码周围搜索关键字,我发现它来自 ajv.min.js 文件,具体来说,可能在文件的这个代码部分中:
44: [function(e, r, t) {
var a;
a = this,
function(e) {
"use strict";
function C() {
for (var e = arguments.length, r = Array(e), t = 0; t < e; t++) r[t] = arguments[t];
if (1 < r.length) {
r[0] = r[0].slice(0, -1);
for (var a = r.length - 1, s = 1; s < a; ++s) r[s] = r[s].slice(1, -1);
return r[a] = r[a].slice(1), r.join("")
}
return r[0]
}
显然,扩展运算符没有被转换成 IE11 可以消化的东西,并且浏览器在 (...e) 函数参数的第一个句点上出现“预期标识符”错误。
有关解决问题的解决方法或特定 polyfill 的任何建议?
解决方案
IE浏览器不支持Spread语法和Rest参数,为了得到同样的结果,可以参考以下方法:
方法一:
使用JavaScript方法(如:foreach或数组方法)循环遍历参数或数组项,而不是使用Spread语法或Rest Parameter。更多详细信息,请查看以下链接:
方法 2:
使用@babel/polyfill和babel-plugin-transform-object-rest-spread polyfills。尝试使用以下命令安装 polyfill:
npm install --save @babel/polyfill
npm install --save-dev babel-plugin-transform-object-rest-spread
此外,由于 IE 浏览器不支持 ES 6 语法,请检查您的 polyfills.ts 文件,并取消注释 IE 浏览器的相关包。
/** IE9, IE10 and IE11 requires all of the following polyfills. **/
import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
// import 'classlist.js'; // Run `npm install --save classlist.js`.
/** IE10 and IE11 requires the following for the Reflect API. */
import 'core-js/es6/reflect';
/** Evergreen browsers require these. **/
// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
import 'core-js/es7/reflect';
推荐阅读
- python-3.x - 将字符串转换为时间
- c - Makefile:致命错误:没有这样的文件或目录
- emeditor - 将 emeditor 宏输出的搜索结果复制到剪贴板并发送到 potplayer
- sql - 如何拆分句子并在一列上只剩下 15 个或更少(不大于 15)个字符,但最后它可能是一个完整的单词
- node.js - 如何使用 Await Inside Array.map 进行 API 的响应
- php - php mysql 表视频时间更新
- r - 如何修改 R 函数 lapply 中的列表/向量参数?
- excel - 如何仅在选定单元格上使用 VBA DateAdd
- javascript - 如何在选项卡切换中激活选项卡面板的第二项
- filter - Tableau - 如何将筛选值包含到操作中并筛选目标工作表