Ich habe diese Frage zum "Komma-Operator" in expression ( ,
) und in den MDN-Dokumenten darüber gelesen , kann mir aber kein Szenario vorstellen, in dem dies nützlich ist.
Wann ist der Kommaoperator nützlich?
javascript
comma-operator
Gdoron unterstützt Monica
quelle
quelle
var i, j, k;
vsvar i; var j, var k
?,
Betreiber zu tun hat . Diese Zeile ist auch in gültigC#
, aber der,
Operator existiert dort nicht.,
ist nicht immer der,
Operator (und es ist nie der,
Operator in C #). Daher kann C # einen,
Operator fehlen , während er,
als Teil der Syntax noch frei verwendet wird .,
nicht weit verbreitet ist (und nicht jedes Vorkommen von a,
der Kommaoperator ist) . Sie können es jedoch und ein Array ausleihen, um einen Variablentausch inline durchzuführen, ohne eine temporäre Variable zu erstellen. Wenn Sie die Werte vona
und tauschen möchtenb
, können Sie dies tuna = [b][b = a,0]
. Dadurch wird der Stromb
in das Array eingefügt. Die zweite[]
ist die Eigenschaftszugriffsnotation. Der Index zugegriffen wird0
, aber nicht , bevor die Zuordnunga
zub
, die nun sicher ist , dab
in dem Array zurückgehalten wird. Das,
lässt uns die mehreren Ausdrücke in der machen[]
.Antworten:
Das Folgende ist wahrscheinlich nicht sehr nützlich, da Sie es nicht selbst schreiben, aber ein Minifier kann Code mithilfe des Komma-Operators verkleinern. Beispielsweise:
würde werden:
Der
? :
Operator kann jetzt verwendet werden, da der Kommaoperator (bis zu einem gewissen Grad) zulässt, dass zwei Anweisungen als eine Anweisung geschrieben werden.Dies ist insofern nützlich, als es eine ordentliche Komprimierung ermöglicht (39 -> 24 Bytes hier).
Ich möchte die Tatsache hervorheben , dass das Komma in
var a, b
ist nicht der Komma - Operator , weil sie nicht innerhalb eines existiert Ausdruck . Das Komma hat invar
Aussagen eine besondere Bedeutung .a, b
in einem Ausdruck würde sich auf die beiden Variablen beziehen und auswertenb
, was für nicht der Fall istvar a, b
.quelle
if (condition) var1 = val1, var2 = val2;
Ich persönlich denke, dass das Vermeiden von Klammern den Code lesbarer macht, wenn dies möglich ist.Mit dem Komma-Operator können Sie mehrere Ausdrücke an einer Stelle platzieren, an der ein Ausdruck erwartet wird. Der resultierende Wert mehrerer durch Komma getrennter Ausdrücke ist der Wert des letzten durch Kommas getrennten Ausdrucks.
Ich persönlich benutze es nicht sehr oft, weil es nicht so viele Situationen gibt, in denen mehr als ein Ausdruck erwartet wird und es keine weniger verwirrende Möglichkeit gibt, den Code zu schreiben, als den Komma-Operator zu verwenden. Eine interessante Möglichkeit besteht am Ende einer
for
Schleife, wenn mehr als eine Variable inkrementiert werden soll:Hier sehen Sie, dass
i++, j++
dies an einer Stelle platziert werden kann, an der ein Ausdruck zulässig ist. In diesem speziellen Fall werden die mehreren Ausdrücke für Nebeneffekte verwendet, sodass es keine Rolle spielt, dass die zusammengesetzten Ausdrücke den Wert des letzten annehmen, aber es gibt andere Fälle, in denen dies tatsächlich von Bedeutung sein könnte.quelle
Der Komma-Operator ist häufig nützlich, wenn Sie Funktionscode in Javascript schreiben.
Betrachten Sie diesen Code, den ich vor einiger Zeit für ein SPA geschrieben habe und der ungefähr Folgendes enthielt
Dies war ein ziemlich komplexes, aber reales Szenario. Nehmen Sie mich mit, während ich erkläre, was passiert, und machen Sie sich dabei für den Komma-Operator stark.
Dies verwendet die Verkettung von Underscore an
Nehmen Sie an diese Funktion übergeben alle Optionen auseinander mit
pairs
welcher verwandeln wird{ a: 1, b: 2}
in[['a', 1], ['b', 2]]
Dieses Array von Eigenschaftspaaren wird gefiltert, nach denen im System als "Aktionen" angesehen wird.
Dann wird der zweite Index im Array durch eine Funktion ersetzt, die ein Versprechen zurückgibt, das diese Aktion darstellt (using
map
).Schließlich führt der Aufruf von
reduce
jedes "Eigenschaftsarray" (['a', 1]
) wieder zu einem endgültigen Objekt zusammen.Das Endergebnis ist eine transformierte Version des
options
Arguments, die nur die entsprechenden Schlüssel enthält und deren Werte von der aufrufenden Funktion verwendet werden können.Nur anschauen
Sie können sehen, dass die Reduzierungsfunktion mit einem leeren Statusobjekt beginnt.
state
Für jedes Paar, das einen Schlüssel und einen Wert darstellt, gibt die Funktion dasselbestate
Objekt zurück, nachdem dem Objekt, das dem Schlüssel / Wert-Paar entspricht, eine Eigenschaft hinzugefügt wurde. Aufgrund der Pfeilfunktionssyntax von ECMAScript 2015 ist der Funktionskörper ein Ausdruck. Daher ermöglicht der Komma-Operator eine präzise und nützliche "iteratee" -Funktion.Persönlich bin ich beim Schreiben von Javascript in einem funktionaleren Stil mit ECMAScript 2015 + Arrow Functions auf zahlreiche Fälle gestoßen. Allerdings hatte ich den Komma-Operator nie absichtlich verwendet, bevor ich auf Pfeilfunktionen gestoßen bin (z. B. zum Zeitpunkt des Schreibens der Frage).
quelle
reduce
.reduce((state, [key, value]) => (state[key] = value, state), {})
. Und mir ist klar, dass dies den Zweck der Antwort zunichte macht, aber.reduce((state, [key, value]) => Object.assign(state, { [key]: value }), {})
die Notwendigkeit für den Kommaoperator vollständig eliminieren würde.Eine andere Verwendung für den Komma-Operator besteht darin, Ergebnisse, die Sie nicht interessieren, nur aus praktischen Gründen in der Replik oder Konsole auszublenden.
Wenn Sie beispielsweise
myVariable = aWholeLotOfText
in der Replik oder Konsole auswerten , werden alle soeben zugewiesenen Daten gedruckt. Dies können Seiten und Seiten sein. Wenn Sie es nicht sehen möchten, können Sie es stattdessen auswertenmyVariable = aWholeLotOfText, 'done'
, und die Replik / Konsole gibt nur "Fertig" aus.Oriel richtig weist darauf hin , † angepasst , dass
toString()
oderget()
Funktionen könnten auch dies nützlich machen.quelle
Der Komma-Operator ist nicht spezifisch für JavaScript, sondern in anderen Sprachen wie C und C ++ verfügbar . Als binärer Operator ist dies nützlich, wenn der erste Operand, der im Allgemeinen ein Ausdruck ist, die gewünschte Nebenwirkung hat, die der zweite Operand benötigt. Ein Beispiel aus Wikipedia:
Natürlich können Sie zwei verschiedene Codezeilen schreiben, aber die Verwendung von Komma ist eine weitere Option und manchmal besser lesbar.
quelle
Ich würde Flanagan nicht zustimmen und sagen, dass Komma wirklich nützlich ist und es ermöglicht, besser lesbaren und eleganten Code zu schreiben, insbesondere wenn Sie wissen, was Sie tun:
Hier ist der sehr detaillierte Artikel zur Verwendung von Kommas:
Einige Beispiele von dort zum Beweis der Demonstration:
Ein Fibonacci-Generator:
Finden Sie das erste übergeordnete Element, analog zur jQuery-
.parent()
Funktion:quelle
while ((el = el.parentNode) && (el.tagName != tagName.toUpperCase()))
wäre in diesem Zusammenhang in Ordnung.Ich habe keine andere praktische Verwendung gefunden, aber hier ist ein Szenario, in dem James Padolsey diese Technik für die IE-Erkennung in einer while-Schleife verwendet:
Diese beiden Zeilen müssen ausgeführt werden:
Und innerhalb des Kommaoperators werden beide ausgewertet, obwohl man sie irgendwie zu getrennten Aussagen hätte machen können.
quelle
do
-while
Schleife.In JavaScript kann etwas "Seltsames" ausgeführt werden, indem eine Funktion indirekt mithilfe des Kommaoperators aufgerufen wird.
Hier gibt es eine lange Beschreibung: Indirekter Funktionsaufruf in JavaScript
Mit dieser Syntax:
Sie können auf die globale Variable zugreifen, da sie
eval
beim direkten und indirekten Aufruf anders funktioniert.quelle
Ich habe den Komma-Operator am nützlichsten gefunden, wenn ich solche Helfer schreibe.
Sie können das Komma entweder durch ein || ersetzen oder &&, aber dann müssten Sie wissen, was die Funktion zurückgibt.
Wichtiger als das ist, dass das Komma-Trennzeichen die Absicht kommuniziert - dem Code ist es egal, was der linke Operand auswertet, während die Alternativen einen anderen Grund haben können, dort zu sein. Dies erleichtert wiederum das Verständnis und die Umgestaltung. Sollte sich der Funktionsrückgabetyp jemals ändern, wäre der obige Code nicht betroffen.
Natürlich können Sie dasselbe auf andere Weise erreichen, aber nicht so prägnant. Wenn || und && haben einen Platz im allgemeinen Sprachgebrauch gefunden, ebenso der Komma-Operator.
quelle
tap
( ramdajs.com/docs/#tap ). Im Wesentlichen führen Sie einen Nebeneffekt aus und geben dann den Anfangswert zurück. sehr nützlich in der funktionalen Programmierung :)Ein typischer Fall, den ich am Ende benutze, ist das optionale Parsen von Argumenten. Ich denke, es macht es sowohl lesbarer als auch prägnanter, so dass das Parsen von Argumenten den Funktionskörper nicht dominiert.
quelle
Angenommen, Sie haben ein Array:
Wenn Sie
push
auf dieses Array zugreifen, interessiert Sie selten derpush
Rückgabewert, nämlich die neue Länge des Arrays, sondern das Array selbst:Mit dem Komma-Operator können wir auf das Array drücken, das Array als letzten Operanden für das Komma angeben und dann das Ergebnis - das Array selbst - für einen nachfolgenden Array-Methodenaufruf verwenden, eine Art Verkettung:
quelle
Ein weiterer Bereich, in dem Kommaoperatoren verwendet werden können, ist die Codeverschleierung .
Angenommen, ein Entwickler schreibt einen Code wie diesen:
Jetzt beschließt sie, den Code zu verschleiern. Das verwendete Tool kann den Code folgendermaßen ändern:
Demo: http://jsfiddle.net/uvDuE/
quelle