Hur skriver man ett inline IF-uttryck i JavaScript?
Hur kan jag använda ett inline if-uttryck i JavaScript? Finns det också ett inline else-uttryck?
Något sådant här:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Svar #1
Du behöver nödvändigtvis inte jQuery. JavaScript ensam räcker för detta.
var a = 2;
var b = 3;
var c = ((a < b) ? 'minor' : 'major');
Variabeln c kommer att vara minor om värdet är true, och major om värdet är false.
Detta är känt som en villkorlig (ternär) operator.
https://developer.mozilla.org/sv-SE/docs/JavaScript/Reference/Operators/Conditional_Operator
Svar #2
Det finns en ternär operator, så här:
var c = (a < b) ? "a is less than b" : "a is not less than b";
Svar #3
För att skriva if-satsen på en rad, bör koden inuti den endast vara ett uttalande:
if ( a < b ) // code to be executed without curly braces;
Svar #4
Du kan också approximera ett if/else med endast logiska operatorer.
(a && b) || c
Ovanstående är ungefär samma sak som att säga:
a ? b : c
Och naturligtvis, ungefär samma som:
if ( a ) { b } else { c }
Jag säger ungefär eftersom det finns en skillnad med detta tillvägagångssätt, nämligen att du måste veta att värdet av b kommer att utvärderas som sant, annars kommer du alltid få c. I princip måste du inse att den del som skulle framstå som if() { här } nu är en del av villkoret som du placerar if ( här ) { }.
Ovanstående är möjligt på grund av JavaScripts beteende att passera/returnera ett av de ursprungliga värdena som bildade det logiska uttrycket, vilket beror på typen av operator. Vissa andra språk, som PHP, vidarebefordrar det faktiska resultatet av operationen, det vill säga true eller false, vilket betyder att resultatet alltid är true eller false; till exempel:
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 {}
En huvudfördel, jämfört med en vanlig if-sats, är att de första två metoderna kan operera på högersidan av ett argument, det vill säga som en del av ett tilldelningsuttryck.
d = (a && b) || c;
d = a ? b : c;
if `a == true` then `d = b` else `d = c`
Det enda sättet att uppnå detta med ett standard if-uttryck skulle vara att duplicera tilldelningen:
if ( a ) { d = b } else { d = c }
Du kanske frågar varför man använder enbart logiska operatorer istället för den ternära operatorn, för enklare fall skulle du förmodligen inte göra det, om du inte ville försäkra dig om att a och b båda var sanna. Du kan också uppnå mer strömlinjeformade komplexa villkor med de logiska operatorerna, vilket kan bli ganska rörigt med inbäddade ternära operationer... å andra sidan, om du vill att din kod ska vara lätt att läsa, är ingen av dem egentligen särskilt intuitiv.
Svar #5
På vanlig engelska, syntaxen förklarad:
if(condition){
do_something_if_condition_is_met;
}
else{
do_something_else_if_condition_is_not_met;
}
Kan skrivas som:
condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;
Svar #6
Om du bara vill ha en inline IF (utan ELSE), kan du använda den logiska OCH-operatorn:
(a < b) && /*your code*/;
Om du också behöver en ELSE, använd den ternära operationen som de andra föreslog.
Svar #7
Du kan göra så här i JavaScript:
a < b ? passed() : failed();
Svar #8
<div id="ABLAHALAHOO">8008</div>
<div id="WABOOLAWADO">1110</div>
parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );
