Ich musste immer null
die anderen Bedingungen festlegen, die nichts haben. Gibt es sowieso um ihn herum? Z.B
condition ? x = true : null;
Grundsätzlich gibt es eine Möglichkeit:
condition ? x = true;
Jetzt wird es als Syntaxfehler angezeigt
Zu Ihrer Information, hier ist ein echter Beispielcode:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
javascript
optimization
syntax-error
Oscar Patensohn
quelle
quelle
condition ? x = true : null;
sollte wahrscheinlich als geschrieben werdenx = (condition ? true : null);
. Abgesehen davon wird Javascriptnull
als falsch ausgewertet, sodass Sie in DIESEM Fallx = (condition);
das gleiche Ergebnis erzielen können.if (!defaults.slideshowWidth) defaults.slideshowWidth = obj.find('img').width()+'px'
Antworten:
Erstens ist ein ternärer Ausdruck kein Ersatz für ein if / else-Konstrukt - er entspricht einem if / else-Konstrukt, das einen Wert zurückgibt . Das heißt, eine if / else-Klausel ist Code, ein ternärer Ausdruck ist ein Ausdruck , was bedeutet, dass er einen Wert zurückgibt.
Dies bedeutet mehrere Dinge:
=
, der der Rückgabewert zugewiesen werden sollx = true
gibt true zurück, da alle Ausdrücke den letzten Wert zurückgeben, ändert aber auch x, ohne dass x Auswirkungen auf den zurückgegebenen Wert hat).Kurz gesagt - die "richtige" Verwendung eines ternären Ausdrucks ist
Anstelle Ihres Beispiels
condition ? x=true : null ;
, in dem Sie einen ternären Ausdruck verwenden, um den Wert von festzulegenx
festzulegen, können Sie Folgendes verwenden:Dies ist immer noch ein Ausdruck und könnte daher die Validierung nicht bestehen, daher wäre ein noch besserer Ansatz
Der letzte besteht die Validierung.
Wenn der erwartete Wert ein Boolescher Wert ist, verwenden Sie einfach das Ergebnis des Bedingungsausdrucks
UPDATE In Bezug auf Ihre Stichprobe ist dies wahrscheinlich angemessener:
quelle
i/else
Tippfehler nicht korrigieren, da nicht genügend Zeichen vorhanden sind.void()
. Vielen Dank.Nein, es werden drei Operanden benötigt. Deshalb werden sie ternär genannt Operatoren genannt.
Für das, was Sie als Beispiel haben, können Sie jedoch Folgendes tun:
Obwohl es sicherer ist, geschweifte Klammern zu haben, wenn Sie in Zukunft mehr als eine Anweisung hinzufügen müssen:
Bearbeiten: Nun, da Sie den tatsächlichen Code erwähnen, in dem Ihre Frage gilt:
quelle
Häufiger werden logische Operatoren verwendet, um die Anweisungssyntax zu verkürzen:
In Ihrem speziellen Fall kann die Syntax jedoch noch einfacher sein
Dieser Code gibt den
defaults.slideshowWidth
Wert zurück, wenn der Wertdefaults.slideshowWidth
auf true und derobj.find('img').width()+'px'
Wert andernfalls ausgewertet wird .Weitere Informationen finden Sie in der Kurzschlussbewertung logischer Operatoren.
quelle
quelle
(defaults.slideshowWidth) || (defaults.slideshowWidth = obj.find('img').width()+'px')
oderdefaults.slideshowWidth = defaults.slideshowWidth || (obj.find('img').width()+'px')
Du könntest schreiben
Damit ist x unverändert, wenn die Bedingung falsch ist.
Dies entspricht dann
BEARBEITEN:
Es gibt ein paar Alternativen - ich sage nicht, dass diese besser / schlechter sind - nur Alternativen
Die Übergabe von null als dritter Parameter funktioniert, da der vorhandene Wert null ist. Wenn Sie den Zustand umgestalten und ändern, besteht die Gefahr, dass dies nicht mehr der Fall ist. Übergabe des bestehenden Wertes als 2. Wahl in den ternären Wachen dagegen:
Sicherer, aber vielleicht nicht so schön anzusehen und mehr zu tippen. In der Praxis würde ich wahrscheinlich schreiben
quelle
In Ihrem Fall sehe ich den ternären Operator als redundant an. Sie können die Variable mit den Operatoren ||, && direkt dem Ausdruck zuweisen.
wird werden :
Es ist klarer, es ist mehr "Javascript" -Stil.
quelle
Was ist mit einfach
quelle
Um einen ternären Operator ohne weiteres innerhalb eines Arrays oder einer Objektdeklaration zu verwenden, können Sie den ES6-Spread-Operator verwenden
...()
Und für Objekte:
Originalquelle
quelle