wake-up-neo.com

Lassen Sie den zweiten Ausdruck weg, wenn Sie die Kurzform if-else verwenden

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.

278
Nikki

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 )

253
ajax333221

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();
734
Nicole

Andere Option:

x === 2 ? doSomething() : void 0;
61
Buzinas

Wenn Sie das Andere nicht tun, warum nicht:

if (x==2) doSomething();
18
Prescott

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;
11
Ted Hopp

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;
  }
  • P.S - Dieser Code ist möglicherweise schwer zu lesen oder zu verstehen, daher ist er nicht immer die beste Option. Ich sage nur .. :)
5
DotBot

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).

3
nhahtdh

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');
1