192

Come posso utilizzare una dichiarazione in linea if in JavaScript? Esiste anche una dichiarazione in linea else?Come scrivere un'istruzione IF inline in JavaScript?

Qualcosa di simile a questo:

var a = 2; 
var b = 3; 

if(a < b) { 
    // do something 
} 
+11

Dov'è il jQuery qui? E comunque non capisco davvero la domanda. – Marc

+0

parte jquery potrebbe essere come questo $ (document) .ready (function() {var a = 2; var b = 3; se (a takeItEasy

+0

anche una domanda knockoutjs –

risposta

434

Non c'è necessariamente bisogno jQuery. JavaScript lo farà da solo.

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

La variabile c sarà minor se il valore è true, e major se il valore è false.


Questo è noto come operatore condizionale (ternario).

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

+51

Illustra come utilizzare un IF Inline, che risponde ESATTAMENTE alla domanda. – MattW

+17

Giusto per notare, tutti i parents in questo caso sono opzionali. Spesso è lo stile di preferenza/codifica personale che determina quando vengono utilizzati. –

+0

@WillKlein dici che tutti i paren sono facoltativi quando faccio questo come() ?: invece di (()? :) Ottengo risultati diversi. Lo so solo perché l'ho provato come se fosse in PHP. – khany

13

Uhm, se si intende in JavaScript allora si potrebbe fare così:

a < b ? /*do something*/ : /*do something else*/; 
+1

Mi piace questa risposta. semplice e diretto al punto – shlomia

31

C'è un operatore ternario, come questo:

var c = (a < b) ? "a is less than b" : "a is not less than b"; 
+2

In realtà non deve essere assegnato a nulla. Gli elementi del lato destro possono semplicemente essere chiamate di funzione. – jfriend00

+7

Non devono nemmeno essere chiamate di funzione ... '0 <1: 5: 120;' è un'istruzione perfettamente valida. Un po 'inutile a meno che tu non sia pagato per linea, però. – Ryan

+0

Ok, @ jfriend00, minitech, grazie per i suggerimenti. –

31

Per scrivere if dichiarazione in linea, il codice all'interno di esso dovrebbe essere una sola istruzione:

if (a < b) // code to be executed without curly braces; 
15
<div id="ABLAHALAHOO">8008</div> 
<div id="WABOOLAWADO">1110</div> 

parseInt($('#ABLAHALAHOO').text()) > parseInt($('#WABOOLAWADO).text()) ? alert('Eat potato') : alert('You starve'); 
+35

Non so nemmeno cosa ho appena letto, ma sto ridendo piuttosto forte. – Jazz

+0

è così divertente +1 –

23

In inglese semplice, la sintassi è stata spiegata:

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

può essere scritta come:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met; 
+2

E 'possibile farlo senza la frase "else"? cioè 'condizione? true' –

3

Per aggiungere a questo è anche possibile utilizzare in linea se la condizione con & & e || operatori. Ti piace questa

var a = 2; 
var b = 0; 

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

È inoltre possibile approssimare un if/else utilizzando gli operatori logico.

(a && b) || c 

Quanto sopra è più o meno lo stesso che dire:

a ? b : c 

E, naturalmente, più o meno lo stesso di:

if (a) { b } else { c } 

Dico più o meno perché c'è una differenza con questo approccio , in quanto devi sapere che il valore di b verrà valutato come true, altrimenti riceverai sempre c. Bisogna rendersi conto che la parte che appare if() { here } fa ora parte della condizione in cui si inserisce if (here) { }.

Quanto sopra è possibile a causa del comportamento di JavaScripts di passaggio/restituzione di uno dei valori originali che formano l'espressione logica, che dipende dal tipo di operatore.Alcuni altri linguaggi, come PHP, portano il risultato effettivo dell'operazione cioè vero o falso, il che significa che il risultato è sempre vero o falso; es:

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 {} 

Un vantaggio principale, rispetto ad un normale if, è che i primi due metodi possono operare sul lato destro di un argomento cioè come parte di un'assegnazione.

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

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

L'unico modo per raggiungere questo obiettivo con uno standard di istruzione if potrebbe essere quella di duplicare l'assigment:

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

Si può chiedere perché usare solo Logical Operators al posto del Ternary Operator, per i casi semplici che probabilmente wouldn a meno che non volessi assicurarti che a e b fossero entrambi veri. È inoltre possibile ottenere condizioni complesse più snelle con gli operatori logici, che possono diventare piuttosto disordinati utilizzando operazioni ternarie nidificate ... quindi, di nuovo, se si desidera che il codice sia facilmente leggibile, non è nemmeno così intuitivo.

+1

Pollice su per l'idea senza usare 'if .. else ..'. http://qr.ae/RwmrBb –

9

Se si desidera solo un inline IF (senza l'altro), è possibile utilizzare l'operatore logico AND:

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

Se avete bisogno di un ELSE anche, utilizzare l'operazione ternario che le altre persone hanno suggerito.

0

Non è la domanda in sostanza: posso scrivere quanto segue?

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

la risposta è, sì, quanto sopra verrà tradotto.

tuttavia, essere attenti facendo quanto segue

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

ricordarsi di codice ambiguo tra parentesi come sopra sarà un'eccezione (e permutazioni simili produrrà comportamento indesiderato.)

2

proposito, è possibile comporre conditional operators

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

Se la logica è sufficientemente complessa, allora si potrebbe considerare l'utilizzo di un IIFE

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

Naturalmente, se si prevede di utilizzare questa logica più di una volta, allora si alcunché di incapsulare in una funzione per mantenere le cose belle ed asciutto.

2

ho spesso bisogno di eseguire più codice per ogni condizione, utilizzando: (, ,) elementi di codice multipli possono eseguire:

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