Ich verwende jQuery 1.7.1
Ich fange gerade an, den ternären JavaScript-Operator zu verwenden, um einfache if / else-Anweisungen zu ersetzen. Ich habe das an mehreren Stellen erfolgreich gemacht. Ich war überrascht, als ich erfolgreich etwas anderes zum Laufen brachte, als ich sicher war, dass es nicht funktionieren würde, aber ich versuchte es trotzdem.
Hier ist die ursprüngliche Aussage:
function updateItem() {
$this = $(this);
var IsChecked = $this.hasClass("IsChecked");
if (IsChecked == true){
removeItem($this);
} else {
addItem($this);
}
}
Hier ist die gleiche Funktion mit dem ternären Operator:
function updateItem() {
$this = $(this);
var IsChecked = $this.hasClass("IsChecked");
(IsChecked == true) ? removeItem($this) : addItem($this);
}
Ich war überrascht, weil alle Beispiele, die ich sah, lediglich Variablen wie diese setzten:
x = (1 < 2) ? true : false;
Meine Frage ist, ob dies "normal" ist und ob es in den meisten JavaScript-Versionen funktioniert. Wo wird es scheitern? Gibt es andere weniger offensichtliche Verwendungszwecke dafür?
UPDATE - Danke für den "echten" Rat !!!
Ich benutze dies als meine Funktion:
function updateItem() {
$this = $(this);
$this.hasClass("IsChecked") ? removeItem($this) : addItem($this);
}
(IsChecked ? removeItem : addItem)($this). Um Ihre Frage zu beantworten: Ja, dies ist normal und es ist nichts Falsches daran, ternäre Operatoren zu verwenden, solange sie die Wartbarkeit oder Lesbarkeit in einer Situation, in der dies erforderlich ist, nicht beeinträchtigen. jsfiddle.net/vsB3f
if($this.hasClass("IsChecked")) removeItem($this); else addItem($this)ist der richtige Weg. Der ternäre Operator ist nicht für Fälle wie diesen gedacht, sondern für Dinge wie foo(isChecked ? 'bar' : meow());(dh wenn Sie sich um den "Rückgabewert" dessen kümmern, was Sie in den then / else-Blöcken tun)
$(this).hasClass("IsChecked") ? removeItem($this) : addItem($this); Ich kann Ihren Code so verstehen, wie er in einer Zeile ist, sodass er meiner Faustregel entspricht (siehe Beitrag unten). Funktioniert bei mir.