Es ist eine Objektzerstörungsaufgabe. Wie ich haben Sie es vielleicht überraschend gefunden, weil die Syntax zur ES6-Objektzerstörung aussieht, sich aber NICHT wie eine Objektliteralkonstruktion verhält.
Es unterstützt die sehr knappe Form, in die Sie geraten sind, sowie das Umbenennen der Felder und Standardargumente:
Im Wesentlichen ist es {oldkeyname: newkeyname = defaultvalue, ...}. ':' ist NICHT das Schlüssel / Wert-Trennzeichen; '=' ist.
Einige Folgen dieser Entscheidung zum Sprachdesign sind, dass Sie möglicherweise Dinge wie tun müssen
; ({a, b} = some_object);
Die zusätzlichen Parens verhindern, dass die linken geschweiften Klammern als Block analysiert werden, und das führende Semikolon verhindert, dass die Parens als Funktionsaufruf für eine Funktion in der vorherigen Zeile analysiert werden.
Weitere Informationen finden Sie unter:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
Beachten Sie, dass Schlüsselfehler während der Objektzerstörungszuweisung NICHT ausgelöst werden. Sie erhalten nur "undefinierte" Werte, unabhängig davon, ob es sich um einen Schlüsselfehler oder einen anderen Fehler handelt, der stillschweigend als "undefiniert" weitergegeben wurde.
> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
>