GOOGLE ADS

Dienstag, 12. April 2022

Ternäre Operatoren in JavaScript ohne „else“

Ich musste immer nulldie anderen Bedingungen eingeben, die nichts haben. Gibt es einen Ausweg?

Zum Beispiel,

condition? x = true: null;

Gibt es grundsätzlich eine Möglichkeit, Folgendes zu tun?

condition? x = true;

Jetzt wird es als Syntaxfehler angezeigt.

FYI, hier ist ein echter Beispielcode:

!defaults.slideshowWidth? defaults.slideshowWidth = obj.find('img').width()+'px': null;


Lösung des Problems

Zunächst einmal ist ein ternärer Ausdruck kein Ersatz für ein if/else-Konstrukt – er ist ein Äquivalent zu 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 dann, wenn Sie auf der linken Seite eine Variable haben =, der der Rückgabewert zugewiesen werden soll

  • Verwenden Sie nur ternäre Ausdrücke, 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 Seiteneffekte zurückgeben (der Ausdruck x = truegibt wahr zurück, da alle Ausdrücke den letzten Wert zurückgeben, aber er ändert auch x, ohne dass x irgendeine Auswirkung 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 xfestzulegen, können Sie Folgendes verwenden:

 condition && (x = true);

Dies ist immer noch ein Ausdruck und besteht daher möglicherweise keine Validierung, daher wäre ein noch besserer Ansatz

 void(condition && x = true);

Der letzte wird die Validierung bestehen.

Aber andererseits, wenn der erwartete Wert ein boolescher Wert ist, verwenden Sie einfach das Ergebnis des Bedingungsausdrucks selbst

var x = (condition); // var x = (foo == "bar");

AKTUALISIEREN

In Bezug auf Ihr Beispiel ist dies wahrscheinlich angemessener:

defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...