边缘:SCRIPT1028:预期的标识符、字符串或数字

新手上路,请多包涵

我的页面在 Chrome 和 Firefox 中运行良好: 在此处输入图像描述

但是,当我尝试在 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;
  }, {});
}

我该如何解决?

原文由 Maurits Bouman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 552
2 个回答

看起来(令人惊讶的是)Edge 还不支持 property rest,这很不幸,但它只是在 ES2018 中才被正式添加。您需要重写代码以不使用属性 rest( ...rest 对象文字的一部分)(或者,如 CertainPerformance 建议的 那样,使用转译器)。

这是执行此操作的多种方法 _之一_:

 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 在对象上取消优化对象,使属性查找变慢。但是仅仅取消优化这些对象可能不会对您的页面/应用程序的感知速度产生任何影响,所以……

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 4.0 许可协议

Edge 和 IE 都不 支持 对象属性剩余语法(尽管 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);

原文由 CertainPerformance 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题