Kann ich die Kurzschreibweise if else
ohne else
schreiben?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
Mir ist aufgefallen, dass null
für das else funktioniert (aber ich habe keine Ahnung warum oder ob das eine gute Idee ist).
Edit: Einige von Ihnen scheinen sich darüber zu wundern, warum ich es versuchen würde. Seien Sie versichert, es ist nur aus Neugier. Ich mag es, mit JavaScript herumzuspielen.
Dies ist auch eine Option:
x==2 && dosomething();
dosomething()
wird nur aufgerufen, wenn x==2
mit true ausgewertet wird. Dies wird Kurzschließen genannt.
In solchen Fällen wird es nicht häufig verwendet, und Sie sollten wirklich keinen solchen Code schreiben. Ich unterstütze diesen einfacheren Ansatz:
if(x==2) dosomething();
Sie sollten jederzeit lesbaren Code schreiben. Wenn Sie sich Sorgen über die Dateigröße machen, erstellen Sie einfach eine verkleinerte Version mit Hilfe eines der vielen JS-Kompressoren. (z. B. Googles Closure Compiler )
Was Sie haben, ist eine ziemlich ungewöhnliche Verwendung des ternären Operators . Normalerweise wird es als Ausdruck und nicht als Anweisung innerhalb einer anderen Operation verwendet, z.
var y = (x == 2 ? "yes" : "no");
Aus Gründen der Lesbarkeit (weil das, was Sie tun, ungewöhnlich ist) und weil das "Sonst", das Sie nicht wollen, vermieden wird, würde ich Folgendes vorschlagen:
if (x==2) doSomething();
Andere Option:
x === 2 ? doSomething() : void 0;
Wenn Sie das Andere nicht tun, warum nicht:
if (x==2) doSomething();
Die Verwendung von null
ist für einen der Zweige eines ternären Ausdrucks ausreichend. Und ein ternärer Ausdruck ist eine gute Aussage in Javascript.
Wenn Sie jedoch daran denken, eine Prozedur aufzurufen, ist es klarer, dies mit if..else zu schreiben:
if (x==2) doSomething;
else doSomethingElse
oder, in deinem Fall,
if (x==2) doSomething;
Eine winzige Ergänzung zu diesem sehr, sehr alten Thread.
Angenommen, Sie befinden sich in einer for
-Schleife und müssen eine Variable für einen truthy/falsy
-Wert mit einem ternären Operator auswerten, während Sie für den Fall, dass es falsy
ist, continue
- Sie werden ein Problem haben, weil Sie kein Ausdruck zurückgeben, sondern stattdessen ein Anweisung ohne Wert.
Dies wird Uncaught SyntaxError: Unexpected token continue
erzeugen
for (var i = 0; i < myArray.length; i++) {
myArray[i].value ? alert('yay') : continue;
}
Wenn Sie also eine Anweisung zurückgeben und dennoch eine Zeile für Ihren Code verwenden möchten, obwohl dies auf den ersten Blick etwas seltsam erscheint und möglicherweise nicht der strengen Sprachverwendung folgt, können Sie dies stattdessen tun:
for (var i = 0; i < myArray.length; i++) {
if (myArray[i].value) alert('yay') ; else continue;
}
Technisch gesehen funktioniert das Setzen von Null oder 0 oder nur eines zufälligen Wert (da Sie den Rückgabewert nicht verwenden). Warum verwenden Sie dieses Konstrukt anstelle des Konstrukts if
? Es ist weniger offensichtlich, was Sie versuchen, wenn Sie Code auf diese Weise schreiben, da Sie die Leute möglicherweise mit dem No-Op verwechseln (null in Ihrem Fall).
Wahrscheinlich am kürzesten
x-2||dosomething()
let x=1, y=2;
let dosomething = s=>console.log(s);
x-2||dosomething('x do something');
y-2||dosomething('y do something');