JavaScript Variable fallback
Bitte kann mir jemand erklären, was diese Codezeile macht:
var list = calls[ev] || (calls[ev] = {});
Meine beste Vermutung:
Er die Einstellung der variable "Liste" mit dem Wert des calls.xxx, wo xxx ist eine variable, ev. Wenn Anrufe[ev] nicht existiert, dann erstellen Sie es als ein leeres Objekt und Zuordnung das leere Objekt "Liste". Ist das richtig?
Warum sind die Klammern, die verwendet wird? Wo finde ich mehr info über die Verwendung || bei der Einstellung von Variablen und die Verwendung von Klammern in diesem Kontext? Danke!
- Die Klammern sind nur um das Recht der Auswertung des Ausdrucks, weil
||
hat eine höhere Priorität als der Zuweisungsoperator=
. Ohne Klammer, es wurde ausgewertet, wievar list = (calls[ev] || calls[ev]) = {};
und würde zu einem Fehler führen. MDN JavaScript Referenz ist ziemlich umfassend. - mögliche Duplikate von Was macht der | | - operator zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser code ist äquivalent zu
Beiden Funktionen der Sprache verwendet werden:
a || b
. Wenna
isttrue
dannb
wird nicht ausgewertet). Also, wenn Sie zuweisenvar v = a || b;
unda
ergibt etwas, das umgewandelt werden kanntrue
, dannb
wird nicht ausgewertet.var a = b = c;
)Die Klammern sind notwendig, um diese interpretation:
(was ein Fehler).
Deine Vermutung ist richtig. Dies ist ein gemeinsamer Weg, um zu erklären, "default" Werte für Variablen in JavaScript.
Das funktioniert in der Weise, dass in JavaScript, eine Undefinierte variable ist falsy, was bedeutet, dass in jeder booleschen comparaison Betrieb, wird es bewerten zu
false
. Sie können dann mit dem ODER-operator kombiniert zwei Werte, und wird es wieder der erste Wert, der ausgewertet wirdtrue
.du hast Recht über Ihre erste Vermutung. Dies ist ein gemeinsames Muster für die Initialisierung der javascript-namespaces. Es dient dazu, sicherzustellen, dass Sie nicht überschreiben Vorherige Objekt mit dem gleichen Namen. Die meisten populären Bibliotheken wird etwas ähnliches tun, um zu erstellen Sie Ihre namespace-Objekten.
Den Klammern ist es so, dass die Ausdrücke werden ausgewertet, in die richtige Reihenfolge.
||
oder 'logisch ' ODER' hat eine höhere Vorrang als der Zuweisungsoperator=
, damit die Klammern sind notwendig, um sicherzustellen, dass dieses idiom wertet in der richtigen ReihenfolgeDie andere Sache zu beachten ist, dass die vielen Sprachen, die Javascript enthalten, bieten short-circuit-evaluation von booleschen Operatoren wie UND und ODER. Wenn der erste operand des logischen oder wahr, es gibt keine Notwendigkeit zu bewerten, der zweite operand ist, als würde es keinen Unterschied machen, das Ergebnis.
Verstehen, und du wirst sehen, das ist keine spezielle Zuordnung syntax, sondern ein idiom, oder-Muster, die nutzt eine Sprache verfügen, um eine kompaktere Darstellung einer Idee.