Wie schreibe ich eine Inline-IF-Anweisung in JavaScript?

286

Wie kann ich eine Inline- ifAnweisung in JavaScript verwenden? Gibt es auch eine Inline- elseAnweisung?

Etwas wie das:

var a = 2;
var b = 3;

if(a < b) {
    // do something
}
immer mit der Ruhe
quelle
12
Wo ist die jQuery hier? Und ich verstehe die Frage sowieso nicht wirklich.
Marc
jquery part könnte so aussehen $ (document) .ready (function () {var a = 2; var b = 3; if (a <b) {// etwas tun}});
takeItEasy
Es ist auch eine Knockout-Frage
Martin Capodici
1
Es ist auch ein Winkel 1 und 2 und jedes andere js Framework (einschließlich vanilla.js) da draußen Frage
Ben Taliadoros

Antworten:

641

Sie benötigen nicht unbedingt jQuery. JavaScript allein wird dies tun.

var a = 2;
var b = 3;    
var c = ((a < b) ? 'minor' : 'major');

Die cVariable ist, minorwenn der Wert ist trueund majorwenn der Wert ist false.


Dies wird als bedingter (ternärer) Operator bezeichnet.

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator

MattW
quelle
59
Es zeigt, wie eine Inline-IF verwendet wird, die die Frage GENAU beantwortet.
MattW
26
Zu beachten ist, dass in diesem Fall alle Parens optional sind. Es ist oft die persönliche Präferenz / der Codierungsstil, der bestimmt, wann sie verwendet werden.
Will Klein
3
@ Khany, das ist eine JavaScript-Frage. Ausdrücke können in anderen Sprachen anders ausgewertet werden.
Will Klein
1
@MattW Dies zeigt nicht, wie man eine Inline-IF verwendet, es zeigt, wie man eine IF ELSE verwendet
Finlay Percy
1
@getName nicht wirklich, aber Sie könnten eine einzeilige if-Anweisung verwenden, wenn Sie wolltenif (a < b) c = 'major';
MattW
44

Zum ifInline- Schreiben einer Anweisung sollte der darin enthaltene Code nur eine Anweisung sein:

if ( a < b ) // code to be executed without curly braces;
nicht definiert
quelle
43

Es gibt einen ternären Operator wie diesen:

var c = (a < b) ? "a is less than b"  : "a is not less than b";
Mahmoud Gamal
quelle
4
Es muss eigentlich nichts zugeordnet werden. Die Elemente auf der rechten Seite können einfach Funktionsaufrufe sein.
jfriend00
7
Sie müssen nicht einmal Funktionsaufrufe sein ... 0 < 1 : 5 : 120;ist eine absolut gültige Aussage. Ein wenig nutzlos, es sei denn, Sie werden pro Zeile bezahlt.
Ry-
Ok, @ jfriend00, minitech, Danke für die Tipps.
Mahmoud Gamal
@ jfriend00 Ich würde jedoch in fast allen Fällen davon abraten. Wenn Sie den Wert des Ausdrucks nicht verwenden, möchten Sie wirklich Nebenwirkungen. und Nebenwirkungen ist, wofür Aussagen großartig sind. Wenn Sie ifin einem solchen Fall die einfache alte langweilige Anweisung verwenden, wird Ihr Code wahrscheinlich viel einfacher zu lesen und zu verstehen sein und es ist weniger wahrscheinlich, dass er mit späteren Änderungen bricht.
Emil Lundberg
35

Sie können ein if / else auch nur mit logischen Operatoren approximieren.

(a && b) || c

Das Obige ist ungefähr dasselbe wie zu sagen:

a ? b : c

Und natürlich ungefähr das Gleiche wie:

if ( a ) { b } else { c }

Ich sage grob, weil es bei diesem Ansatz einen Unterschied gibt, dass Sie wissen müssen, dass der Wert von bals wahr bewertet wird, sonst erhalten Sie immer c. Grundsätzlich müssen Sie erkennen, dass der Teil, der erscheinen würde, if () { here }jetzt Teil der Bedingung ist, die Sie platzieren if ( here ) { }.

Dies ist aufgrund des JavaScripts-Verhaltens möglich, bei dem einer der ursprünglichen Werte, die den logischen Ausdruck gebildet haben, übergeben / zurückgegeben wird, was vom Typ des Operators abhängt. Bestimmte andere Sprachen wie PHP führen das tatsächliche Ergebnis der Operation fort, dh wahr oder falsch, was bedeutet, dass das Ergebnis immer wahr oder falsch ist. z.B:

14 && 0          /// results as 0,  not false
14 || 0          /// results as 14, not true
1 && 2 && 3 && 4 /// results as 4,  not true
true && ''       /// results as ''
{} || '0'        /// results as {}

Ein Hauptvorteil im Vergleich zu einer normalen if-Anweisung besteht darin, dass die ersten beiden Methoden auf der rechten Seite eines Arguments ausgeführt werden können, dh als Teil einer Zuweisung.

d = (a && b) || c;
d = a ? b : c;

if `a == true` then `d = b` else `d = c`

Die einzige Möglichkeit, dies mit einer Standard-if-Anweisung zu erreichen, besteht darin, die Zuordnung zu duplizieren:

if ( a ) { d = b } else { d = c }

Sie fragen sich vielleicht , warum die Verwendung nur logische Operatoren anstelle der Ternary Operator , für einfache Fälle wahrscheinlich würden Sie nicht, es sei denn , Sie wollten sicherstellen, aund bwaren beide wahr. Mit den logischen Operatoren können Sie auch optimierte komplexe Bedingungen erreichen, die mit verschachtelten ternären Operationen ziemlich chaotisch werden können. Wenn Sie jedoch möchten, dass Ihr Code leicht lesbar ist, sind beide nicht wirklich so intuitiv.

Pebbl
quelle
32

Im Klartext erklärte die Syntax:

if(condition){
    do_something_if_condition_is_met;
}
else{
    do_something_else_if_condition_is_not_met;
}

Kann geschrieben werden als:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;
Onimusha
quelle
5
Ist dies ohne die Anweisung "else" möglich? dhcondition ? true
Devil's Advocate
@ ScottBeeson Sicher. Dies hängt auch von Ihrer Verwendung der Bedingung ab. true falseund ""sollte alles in Ordnung sein, um den else-Teil zu ignorieren.
Onimusha
Also 2 == 2 ? doSomething()wäre das das gleiche wie if (2 == 2) doSomething()?
Devil's Advocate
1
Ja, aber der else-Teil kann nicht vollständig weggelassen werden. Zumindest : falseoder : ""sollte da sein, da Javascript dies erwartet.
Onimusha
5
Oh. Ohne die else-Anweisung ist dies also nicht möglich.
Devil's Advocate
21
<div id="ABLAHALAHOO">8008</div>
<div id="WABOOLAWADO">1110</div>

parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );
HyderA
quelle
48
Ich weiß nicht einmal, was ich gerade gelesen habe, aber ich lache ziemlich heftig.
Jazz
20

Wenn Sie nur eine Inline-IF (ohne ELSE) möchten, können Sie den logischen AND-Operator verwenden:

(a < b) && /*your code*/;

Wenn Sie auch eine ELSE benötigen, verwenden Sie die von den anderen Personen vorgeschlagene ternäre Operation.

Nahn
quelle
17

In JavaScript können Sie dies folgendermaßen tun:

a < b ? passed() : failed();
Ivar
quelle
8

Zu Ihrer Information, Sie können bedingte Operatoren erstellen

var a = (truthy) ? 1 : (falsy) ? 2 : 3;

Wenn Ihre Logik ausreichend komplex ist, können Sie ein IIFE verwenden

var a = (function () {
  if (truthy) return 1;
  else if (falsy) return 2;
  return 3;
})();

Wenn Sie diese Logik mehr als einmal verwenden möchten, müssen Sie sie natürlich in eine Funktion einkapseln, um die Dinge schön und trocken zu halten.

Alan
quelle
6

Ich muss oft mehr Code pro Bedingung ( , , )ausführen , indem ich Folgendes verwende: Mehrere Codeelemente können Folgendes ausführen:

var a = 2;
var b = 3;
var c = 0;

( a < b ?  ( alert('hi'), a=3, b=2, c=a*b ) : ( alert('by'), a=4, b=10, c=a/b ) );
kurt
quelle
4

Um dies hinzuzufügen, können Sie auch die Inline-if-Bedingung mit && und || verwenden Betreiber. So was

var a = 2;
var b = 0;

var c = (a > b || b == 0)? "do something" : "do something else";
Anoop
quelle
0

Ist die Frage nicht wesentlich: Kann ich folgendes schreiben?

if (foo)
  console.log(bar)
else
  console.log(foo + bar)

Die Antwort lautet: Ja, das oben Gesagte wird übersetzt.

Seien Sie jedoch vorsichtig, wenn Sie Folgendes tun

if (foo)
  if (bar)
    console.log(foo)
  else 
    console.log(bar)
else 
  console.log(foobar)

Stellen Sie sicher, dass Sie mehrdeutigen Code in geschweifte Klammern setzen, da dies eine Ausnahme auslöst (und ähnliche Permutationen zu unerwünschtem Verhalten führen).

Jay Edwards
quelle
0

Inline wenn:

(('hypothesis') ? 'truthy conclusion' : 'falsey conclusion')

wahrheitsgemäße Schlussfolgerung: Aussagen, die ausgeführt werden, wenn die Hypothese wahr ist

Falsey Fazit: Aussagen, die ausgeführt werden, wenn die Hypothese falsch ist

Ihr Beispiel:

var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
Sammy
quelle