webentwicklung-frage-antwort-db.com.de

Edge: SCRIPT1028: Erwartete ID, Zeichenfolge oder Nummer

Meine Seite funktioniert einwandfrei in Chrome und Firefox: enter image description here

Wenn ich jedoch versuche, diese Seite in Edge zu laden, verschwinden die Fragen und Antworten. Es werden nur die Kategorien gebucht. Wenn Sie versuchen, diese Seite im Internet Explorer zu laden, wird außer der Suchleiste alles ausgeblendet.

Edge gibt mir den folgenden Fehler:

SCRIPT1028: SCRIPT1028: Erwarteter Bezeichner, Zeichenfolge oder Nummer in Zeile 84 von faq.html

Dies bezieht sich auf den folgenden Code:

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;
  }, {});
}

Wie behebe ich das?

6
Maurits Bouman

Es scheint (überraschenderweise), dass Edge noch keine Eigenschaft Rest unterstützt, was bedauerlich ist, aber dann wurde es offiziell nur in ES2018 hinzugefügt. Sie müssen den Code neu schreiben, um die Eigenschaft rest nicht zu verwenden (das ...rest Teil Ihres Objektliteral) (oder, wie CertainPerformance andeutet , einen Transpiler verwenden).

Hier ist eine von vielen Möglichkeiten, dies zu tun:

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;
    }, {});
}

Ich habe die Verwendung von delete vermieden, da delete für ein Objekt die Optimierung des Objekts aufhebt und die Suche nach Eigenschaften verlangsamt. Die Deoptimierung dieser Objekte hat jedoch möglicherweise keinen Einfluss auf die wahrgenommene Geschwindigkeit Ihrer Seite/App.

8
T.J. Crowder

Weder Edge noch IE support object property rest syntax (obwohl Edge es wahrscheinlich irgendwann unterstützen wird). Ich würde vorschlagen, Ihren Code mit automatisch auf ES5 zu transpilieren.) Babel , mit dem Sie in der neuesten und besten Version der Sprache schreiben können, während alte und inkompatible Browser Ihren gesamten transpilierten Code verstehen können

const { category, ...rest } = c;

ergebnisse in

"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"]);

Sieht nicht so hübsch aus, kann aber automatisch durchgeführt werden.

Eine manuelle Möglichkeit könnte sein:

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);
3