但是,当我尝试在Edge中加载此页面时,问题和答案消失了。只发布类别。另外,当尝试在IE中加载此页面时,除搜索栏外,所有内容都会消失。
Edge给我以下错误:
SCRIPT1028:SCRIPT1028:faq.html的第84行上的预期标识符,字符串或数字
这是指以下代码:
function sortByCategory(data) {
return data.reduce((obj, c) => {
const { category, ...rest } = c; // this line throws the error
obj[category] = obj[category] || [];
obj[category].push(rest);
return obj;
}, {});
}
我该如何解决?
答案 0 :(得分:4)
令人惊讶的是,Edge似乎还不支持属性休息,这是不幸的,但随后仅在ES2018中正式添加。您将需要重写代码以不使用属性休息(销毁模式的...rest
部分)(或使用CertainPerformance suggests使用转译器)。
以下是其中一种方法:
function sortByCategory(data) {
return data.reduce((obj, c) => {
//const { category, ...rest } = c;
const { category } = c;
const rest = {};
for (const key of Object.keys(c)) {
if (key !== "category") {
rest[key] = c[key];
}
}
obj[category] = obj[category] || [];
obj[category].push(rest);
return obj;
}, {});
}
我避免使用delete
,因为对象上的delete
会对对象进行非优化,从而使属性查找变慢。但是仅对这些对象进行优化可能不会对页面/应用程序的感知速度产生任何影响,所以...
答案 1 :(得分:2)
Edge和IE support对象属性都不使用语法(尽管Edge最终可能会支持它)。我建议使用Babel自动将代码转换为ES5,这将允许您使用该语言的最新和最佳版本进行编写,同时允许古老且不兼容的浏览器理解所有已转换的代码。例如,插入
const { category, ...rest } = c;
产生
"use strict";
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
var _c = c,
category = _c.category,
rest = _objectWithoutProperties(_c, ["category"]);
看上去并不漂亮,但是可以自动完成。
一种手动的方法是:
const c = {
category: 'category',
foo: 'foo',
bar: 'bar'
};
const category = c.category;
// Object.assign so as not to mutate the original object:
const rest = Object.assign({}, c);
delete rest.category;
console.log(rest);
答案 2 :(得分:2)
如果您有节点包生态系统:
{
...
"browserslist": {
"production": [
...
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version",
"last 1 ie version" // <- make sure this is present
]
},
...
}
答案 3 :(得分:1)
边缘44失败,并带有“ SCRIPT1028:预期的标识符,字符串或数字”:
var a = {};
a = { ...a};
但是成功了:
var a = {};
a = Object.assign({}, a);
答案 4 :(得分:1)
自2020年5月12日起,它将在Microsoft Edge中运行。经过测试的版本:Microsoft Edge Version 81.0.416.72 (Official build) (64-bit)
https://www.microsoft.com/en-us/edge
以下几行代码导致了SCRIPT1028: Expected identifier, string or number
异常,但是在更新所有工作时:
return {
...state,
products: [...state.products, ...action.payload],
};