Was machen die geschweiften Klammern in der switch-Anweisung nach case in es6?

Lesezeit: 3 Minuten

Benutzeravatar von Aurimas
Aurimen

Was ist der Unterschied zwischen:

switch (expression) {
    case:
      somethings;
      break;
}

und

switch (expression) {
    case: {
      somethings;
      break;
    }
}

Zuerst dachte ich, dass ich ein Objektliteral so zurückgeben könnte, aber es stellt sich heraus, dass es sich um einen Syntaxfehler handelt. Was ist eigentlich der Unterschied?

Beispiel aus einer anderen Frage: Wie übergebe ich eine Switch-Anweisung als Funktionsargument in Javascript ES6?

  • Die Syntax auf beiden ist ungültig. Fall sollte etwas angeben, auf das abgeglichen werden soll, und die Rückgabe erfordert die return Stichwort.

    – Kammerherr

    27. Februar 2017 um 8:38 Uhr

  • Warum haben Sie in Ihrem Beispiel break-Anweisungen in Arrays? Geben Sie bitte ein minimales, vollständiges und überprüfbares Beispiel.

    – Kammerherr

    27. Februar 2017 um 17:12 Uhr

  • Beispiel bereitgestellt. Break-Anweisungen waren wie in MDN als optional gedacht

    – Aurimas

    27. Februar 2017 um 21:54 Uhr

  • Können Sie eine Ablehnung erklären?

    – Aurimas

    28. Februar 2017 um 15:49 Uhr

  • Jemand sollte in der Lage sein, f12 zu drücken und Ihr Beispiel in die Chrome-Konsole zu kopieren und einzufügen. Versuch es.

    – Kammerherr

    28. Februar 2017 um 17:49 Uhr

Auf diese Weise verwendete geschweifte Klammern legen einen eigenen Blockbereich fest, in dem Sie local definieren können let Variablen bzw const Konstanten:

switch (false) {
    case true: {
      let x = "bar";
      console.log(x);
      break;
    }

    case false: {
      let x = "baz";
      console.log(x);
      break;
    }
}

Das Beispiel würde ohne verschachtelte Blockumfänge auslösen, da multiple let/const Deklarationen mit demselben Bezeichner sind in Ecmascript 2015 im selben Bereich nicht zulässig.

Bitte beachten Sie, dass die switch -Anweisung selbst einen Blockbereich erstellt, dh ob Sie verschachtelte Blockbereiche verwenden oder nicht, let/const Erklärungen drin switch Lecken Sie nicht in den übergeordneten Bereich.

Allerdings im Rahmen von switchGeschweifte Klammern werden auch rein dekorativ verwendet, um die Blöcke des Einzelnen optisch hervorzuheben case Geäst.

  • „Sie heben den jeweiligen Block optisch hervor“ Das wäre Dekoration, kein syntaktischer Zucker. “Das ist in den meisten Fällen nicht wirklich notwendig” Es wäre sinnvoller zu beschreiben, wann es ist notwendig.

    – ein besserer oliver

    27. Februar 2017 um 10:31 Uhr

  • Hm, gibt es eine strenge Definition von syntaktischem Zucker?

    Benutzer6445533

    27. Februar 2017 um 10:35 Uhr

  • syntaktischer Zucker = einfachere Syntax. Das Hinzufügen von Klammern ist nicht gerade einfacher 😉 “Wenn Sie Fälle nicht mit break beenden, könnten sich verschiedene let/const-Variablen innerhalb von Fällen gegenseitig stören” Es ist ein Gültigkeitsbereich, also werfen zwei Deklarationen mit demselben Bezeichner einen Fehler aus, break oder nicht.

    – ein besserer oliver

    27. Februar 2017 um 11:36 Uhr

  • @zeroflagL Deine zweite Aussage ist definitiv richtig. Sie haben mich erwischt! Wie auch immer, welche Syntax einfacher ist, ist stark meinungsbasiert, also belasse ich es bei syntaktischem Zucker. Sie bieten in Ihrem Kommentar einen alternativen Begriff an, damit die Leute ihren Favoriten auswählen können.

    Benutzer6445533

    27. Februar 2017 um 12:28 Uhr

  • “Welche Syntax einfacher ist, basiert stark auf Meinungen” Das ist nicht der Punkt. Nehmen a ** b anstatt Math.pow(a,b). Beide bedeuten dasselbe, aber eines ist kürzer / prägnanter. Das ist syntaktischer Zucker. Aber case 1: let x = 2 und `Fall 1: { let x = 2 } sind in ihrem Ergebnis völlig unterschiedlich. Es ist nicht nur eine andere Syntax, es ist anders. Ein Apfel ist kein syntaktischer Zucker für eine Orange.

    – ein besserer oliver

    27. Februar 2017 um 13:08 Uhr

Benutzeravatar von Michal Miky Jankovský
Michal Miky Jankovsky

Du musst geschweifte Klammern verwenden:

  1. beim Erstellen mehr Variablen im Blockbereich (const / let) mit der selbe Name
    • nach spez MDN-Webdokumentation
    • FEHLER: Uncaught SyntaxError: Bezeichner ‘Variablenname’ wurde bereits deklariert
  2. beim Benutzen eslint in den Standardeinstellungen und mit sogar einzelne (const / let)
    • nach Vorschrift No-Case-Erklärungen
    • FEHLER: Unerwartete lexikalische Deklaration in Fallblock No-Case-Deklarationen

1438560cookie-checkWas machen die geschweiften Klammern in der switch-Anweisung nach case in es6?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy