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 Javascriptnull
als falsch ausgewertet, sodass Sie in DIESEM Fallx = (condition);
das gleiche Ergebnis erzielen können.