2015-06-14 10 views
6
let text, value; 
if (typeof f == 'string') { 
    text = value = f; 
} else { 
    let { 
     text, value 
    } = f; 
} 

Dadurch zwei neue Vars bewirkt (vom else), aber wenn ich es schreiben, wie so:ES6 Destrukturierung, dynamische Zuordnung

let text, value; 
if (typeof f == 'string') { 
    text = value = f; 
} else { 
    { 
     text, value 
    } = f; 
} 

Ich erhalte einen Syntaxfehler. Was ist der beste Ansatz hier?

+0

Alternativ 'const {text, value} = (typeof f === 'string') ? {Text: f, Wert: f}: f; ' – loganfsmyth

Antwort

7

Sie benötigen Pars um die Zuordnung: (. Live copy on Babel)

let text, value; 
if (typeof f == 'string') { 
    text = value = f; 
} else { 
    ({    // (at start 
     text, value 
    } = f);   //) at end 
} 

Sie müssen diese Pars aus dem gleichen Grund you need parens or similar to immediately invoke a function: den Parser sagen, dass es einen Ausdruck erwarten sollte, keine Aussage . Ohne die Parens, wenn es die { trifft, denkt es, dass das der Anfang eines Blocks ist. Aber im Gegensatz zu der Funktion, hat es Pars sein, nicht ein führendes einstelligen +, ! usw. like this:

let text, value; 
if (typeof f == 'string') { 
    text = value = f; 
} else { 
    +{     // <== Doesn't work like it does with IIFEs 
     text, value 
    } = f; 
} 
+1

Schön, danke! – benhowdle89

+0

Gute Antwort. Kleinere Anmerkung: Die Klammern müssen nur die geschweiften Klammern umgeben. Die Aufgabe selbst kann außerhalb sein. – Zirak

+0

@Zirak: Nein, die Parens müssen um den * ganzen * Zuweisungsausdruck herum sein; Ansonsten ist es ein Fehler: [bit.ly Link zu Babel repl (zu lange um einen Kommentar einzufügen)] (http://bit.ly/1HGPapN). Sie haben sogar eine spezifische Nachricht dafür: "Sie versuchen, einen Ausdruck in Klammern zu verwenden, zB. Statt' ({a}) = 0' benutzen '({a} = 0)' "Und wenn Sie darüber nachdenken Das ist überhaupt nicht überraschend: Mit den Parens nur um die '{}', sieht es aus wie ein Objektinitialisierer in Parens (weil in ES6 diese Kurzschrift verwendet werden kann). –

Verwandte Themen