Ist Babel's Implementierung der ES6-Objektdestrukturierung korrekt?

8

Also ist die grundlegende Destrukturierung in Ordnung, {a, b} = obj wird in a = obj.a; b = obj.b transpiliert.

Meine Frage ist ein bisschen eine seltsame Syntax, über die ich zufällig gerannt bin und ich frage mich, ob jemand mich auf die Spezifikation verweisen kann, da ich sie nicht finden kann:

%Vor%

Das macht die beiden a , b Zuweisungen und gibt dann obj.c zurück. Es ist für mich ziemlich nützlich für einen Byte-Stream-Decoder, da ich schreiben kann:

%Vor%

Mein Problem ist, dass ich diese Syntax nirgendwo gesehen habe und mich nicht auf etwas verlassen möchte, das entweder falsch implementiert oder in der Angebotsphase ist.

    
Mark Kahn 03.09.2015, 06:59
quelle

2 Antworten

3

Es gibt in der Destrukturierungsaufgabe nichts Besonderes: Es wird wie jede andere Zuweisung mit dem Operator = ausgewertet.

Also gibt es rval zurück.

Was bedeutet, dass Sie sich auf Ihre Syntax verlassen können

Einige Details:

Der Destrukturierungsteil wird in 6 [ 1 ] :

  

Lassen Sie status das Ergebnis der Ausführung von DestructuringAssignmentEvaluation von assignmentPattern mit rval als Argument sein.

und nach diesem Punkt erfolgt die Bewertung der Zuweisung wie gewöhnlich, wie im Fall a = b = 42; .

Referenzen:

zerkms 03.09.2015, 07:57
quelle
1

Ja, es wird erwartet, dass es so funktioniert (siehe die Antwort von @zerkms für Details). Dass Sie die Syntax nirgendwo gesehen haben, liegt daran, dass es nicht gerade praktisch ist, auf Eigenschaften des Ergebnisses eines Zuweisungsausdrucks zuzugreifen, da der Code dadurch ziemlich unlesbar wird. Ob Sie einer normalen Variablen oder einem destrukturierenden Ausdruck zuordnen, macht hier keinen großen Unterschied.

Sie könnten den Code jedoch leicht in eine sinnvolle Destrukturierungsaufgabe umwandeln:

%Vor%

oder genauer gesagt, näher an Ihrem ursprünglichen Code:

%Vor%     
Bergi 03.09.2015 12:31
quelle