javascript - ES6 destrukturering, dynamisk tilldelning
let text, value;
if (typeof f == 'string') {
text = value = f;
} else {
let {
text, value
} = f;
}
Att göra detta skapar två nya variabler (från else), men om jag skriver det så här:
let text, value;
if (typeof f == 'string') {
text = value = f;
} else {
{
text, value
} = f;
}
Jag får ett syntaxfel. Vad är det bästa tillvägagångssättet här?
Svar #1
Du behöver parenteser runt tilldelningen:
let text, value;
if (typeof f == 'string') {
text = value = f;
} else {
({ // ( at start
text, value
} = f); // ) at end
}
(Live-kopia på Babel.)
Du behöver de där parenteserna av samma anledning som du behöver parenteser eller liknande för att omedelbart anropa en funktion: För att tala om för parsaren att den ska förvänta sig ett uttryck, inte ett uttalande. Utan parenteserna, när den stöter på {, tror den att det är början på ett block. Men till skillnad från med funktionen måste det vara parenteser, inte en ledande unär +, ! osv. som detta:
let text, value;
if (typeof f == 'string') {
text = value = f;
} else {
+{ // <== Doesn't work like it does with IIFEs
text, value
} = f;
}
