边缘:SCRIPT1028:期望的标识符,字符串或数字

时间:2018-12-05 08:40:12

标签: javascript jquery microsoft-edge

我的页面在Chrome和Firefox中运行良好: enter image description here

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

我该如何解决?

5 个答案:

答案 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)

如果您有节点包生态系统:

  1. 更新 package.json 中的浏览器列表

{
  ...
  "browserslist": {
    "production": [
      ...
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version",
      "last 1 ie version" // <- make sure this is present
    ]
  },
  ...
}

  1. 删除 node_modules 中的 .cache 文件夹
  2. 重新运行开发服务器

答案 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],
};