Ich bin mir nicht sicher, ob dies eine Mozilla-spezifische JS-Syntax ist, aber ich habe häufig festgestellt, dass Variablen auf diese Weise deklariert werden, z. B. in SDK-Zusatzdokumenten :
var { Hotkey } = require("sdk/hotkeys");
und in verschiedenen Chrom-Javascript ( let
Aussage wird anstelle von verwendet var
),
let { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
Ich fand es sehr verwirrend, aber ich kann keine Dokumentation über beide Syntax finden, selbst auf MDN .
Antworten:
Sie sind beide JavaScript 1.7-Funktionen. Die erste sind Variablen auf Blockebene :
Die zweite heißt Destrukturierung :
Für diejenigen, die mit Python vertraut sind, ähnelt es dieser Syntax:
Der erste Codeblock ist eine Abkürzung für:
Sie können den zweiten Codeblock wie folgt umschreiben:
quelle
var { Hotkey }
ist gleichbedeutend mitvar { Hotkey: Hotkey }
. Vielen Dank, dass Sie die Dokumentation gefunden haben!var Hotkey = require(...).Hotkey
? Oder werden nur Tastenanschläge gespeichert?Was Sie sehen, ist eine Destrukturierungsaufgabe. Es ist eine Form des Mustervergleichs wie in Haskell.
Mithilfe der Destrukturierungszuweisung können Sie Werte aus Objekten und Arrays extrahieren und sie neu deklarierten Variablen mithilfe der Objekt- und Array-Literal-Syntax zuweisen. Dies macht den Code viel prägnanter.
Beispielsweise:
Der obige Code entspricht:
Ähnliches gilt für Arrays:
Dies entspricht:
Sie können eine Objekteigenschaft auch wie folgt extrahieren und umbenennen:
Dies entspricht:
Das ist alles dazu.
quelle
var {a, b, c} = ascii;
Syntax.Dies ist eine zerstörerische Aufgabe in Javascript und Teil des ES2015-Standards. Es entpackt oder extrahiert Werte aus Arrays oder Eigenschaften von Objekten in verschiedene Variablen. ZB: Array-Destrukturierung
// mit Destrukturierung var [eins, zwei, drei] = foo
ZB: Objektzerstörung
var o = {p: 42, q: true}; var {p, q} = o;
console.log (p); // 42 console.log (q); // wahr
// Neue Variablennamen zuweisen var {p: foo, q: bar} = o;
console.log (foo); // 42 console.log (bar); // wahr
quelle
Es gibt eine Dokumentation für die
let
Anweisung auf MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/letlet
ist insofern ähnlichvar
, als es den Umfang der deklarierten Variablen einschränkt. Sie können damit eine Variable innerhalb einesif(){}
Blocks (oder eines anderen Blocks) deklarieren und diese Variable nur in diesem Block "sichtbar" machen (JavaScript hat bisher einen Funktionsumfang und keinen Blockumfang wie die meisten anderen Sprachen). Daslet
ist also im Grunde eine "Lösung" für etwas, mit dem viele Leute Probleme haben. Beachten Sie, dass tihs eine JavaScript 1.7-Funktion ist.Ich habe nichts gefunden
{Foo}
.quelle
{Foo}
{
und}
.