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:
- Verwenden Sie ternäre Ausdrücke nur, wenn Sie auf der linken Seite eine Variable haben
=, der der Rückgabewert zugewiesen werden soll
- Verwenden Sie ternäre Ausdrücke nur, wenn der zurückgegebene Wert einer von zwei Werten sein soll (oder verwenden Sie verschachtelte Ausdrücke, wenn dies passt).
- Jeder Teil des Ausdrucks (nach? und nach :) sollte einen Wert ohne Nebenwirkungen zurückgeben (den Ausdruck
x = 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
var resultofexpression = conditionasboolean ? truepart: falsepart;
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:
condition && (x = true);
Dies ist immer noch ein Ausdruck und könnte daher die Validierung nicht bestehen, daher wäre ein noch besserer Ansatz
void(condition && x = true);
Der letzte besteht die Validierung.
Wenn der erwartete Wert ein Boolescher Wert ist, verwenden Sie einfach das Ergebnis des Bedingungsausdrucks
var x = (condition); // var x = (foo == "bar");
UPDATE
In Bezug auf Ihre Stichprobe ist dies wahrscheinlich angemessener:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;sollte wahrscheinlich als geschrieben werdenx = (condition ? true : null);. Abgesehen davon wird Javascriptnullals falsch ausgewertet, sodass Sie in DIESEM Fallx = (condition);das gleiche Ergebnis erzielen können.