2012-05-10 11 views
11

einzuwenden Während bei einigen Javascript-Code für Mozilla (Firefox) Add-on SDK suchen, ich Art von Variablendeklaration gesehen hatte ich nicht gesehen vor:Javascript - mehrere Variablen zuweisen Eigenschaften mit geschweiften Klammern in Variablendeklaration

var { foo, bar } = someFunction("whatever"); // just an example 

Sehen Sie diese geschweiften Klammern um den Variablennamen? Es stellt sich heraus, dass auf diese Weise die Werte von Eigenschaften eines Objekts gleichzeitig mehreren Variablen zugewiesen werden können. Es ähnelt destructuring assignment oder PHP list, außer mit Objekteigenschaften anstelle von Arrays.

Ich fand dies tatsächlich durch ein bisschen herumfummeln, da es keine Dokumentation darüber zu geben scheint. Sehen Sie sich diesen Code an:

function gimmeAnObject() { 
    return { 
     foo: "hey", 
     bar: "sup" 
    }; 
} 

console.log(gimmeAnObject()); // Object { foo="hey", bar="sup" } 

var { foo, bar } = gimmeAnObject(); 

console.log(foo); // hey 
console.log(bar); // sup 

Ich fand auch, dass dies nur in Firefox funktioniert. Chrome wird stattdessen einen Fehler ausgeben: "Uncaught SyntaxError: Unerwartetes Token {". Das erklärt, warum ich es noch nicht gesehen habe, bevor ich angefangen habe, den Firefox-Add-On-Code zu betrachten.

Hat sonst noch jemand diese Art von Variablendeklaration gesehen? Warum kann ich keine Dokumentation darüber finden? Da es nur in Firefox funktioniert, würde ich denken, es könnte eine Mozilla-Sache sein, aber ich konnte nicht einmal etwas darüber auf MDN finden. Andererseits wusste ich vielleicht nicht, wonach ich suchen sollte.

+0

möglich Duplikat [Konstante Erklärung mit Block] (http://stackoverflow.com/questions/10199229/constant-declaration-with-block) –

+1

diese Frage gefunden, während eine fast identische Frage meiner eigenen Komposition :) – Motti

Antwort

5

bei „Destrukturierung Zuordnung“ Links Suche (d http://en.wikipedia.org/wiki/JavaScript_syntax#Assignment und http://dailyjs.com/2011/09/12/destructuring/) es so ist Destrukturierung Zuordnung konstruieren aussieht.

Wikipedia:

In Mozilla's JavaScript, since version 1.7, destructuring assignment allows the assignment of parts of data structures to several variables at once. The left hand side of an assignment is a pattern that resembles an arbitrarily nested object/array literal containing l-lvalues at its leafs which are to receive the substructures of the assigned value.

In JavaScript-Arrays und Objekten sind mehr oder weniger die gleiche, so ist es nicht sehr überraschend, dass Konstrukt für Arrays unterstützt auch für Objekte unterstützt wird.

+1

Huh, sieht aus als hättest du recht. Ich frage mich, warum es so wenig Dokumentation gibt. Ich denke, niemand außer Mozilla sah die Nützlichkeit der Destrukturierungsaufgabe. – grant

0

Sie können es nicht tun. Sie haben einen var zu nennen und etwas zu tun, wie folgt aus:

var myObj = (function(){ 
    return { 
     foo: 'foo', 
     bar: 'bar' 
    }; 
})(); 
+1

Sie Ich denke ja, aber es scheint in Firefox, du kannst. Versuchen Sie den jsFiddle-Link auszuführen, den ich in Firefox bei geöffneter Konsole veröffentlicht habe. – grant

+0

Vielleicht ist Firefox ein bisschen permissiver, oder es hat nur eine eigene Implementierung, die es erlaubt. Aber ich denke, diese Erklärung ist nicht in den Web-Standards –

+2

Es wird zu Web-Standards hinzugefügt. Warte ein paar Jahre. ;) –

Verwandte Themen