Come scrivere un'istruzione IF in linea in JavaScript?


288

Come posso usare un'istruzione inline ifin JavaScript? C'è anche una elsedichiarazione in linea ?

Qualcosa come questo:

var a = 2;
var b = 3;

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

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

la parte jquery potrebbe essere come $ (document) .ready (function () {var a = 2; var b = 3; if (a <b) {// do qualcosa}});
takeItEasy,

è anche una domanda a eliminazione diretta
Martin Capodici,

1
È anche un 1 e 2 angolare e ogni altro framework js (incluso vanilla.js) là fuori domanda
Ben Taliadoros,

Risposte:


644

Non hai necessariamente bisogno di jQuery. Solo JavaScript lo farà.

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

La cvariabile sarà minorse il valore è truee majorse il valore è false.


Questo è noto come operatore condizionale (ternario).

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


59
Illustra come utilizzare un IF in linea, che risponde ESATTAMENTE alla domanda.
Matt,

26
Solo per notare, tutte le parentesi in questo caso sono opzionali. Spesso è lo stile di preferenza / codifica personale che determina quando vengono utilizzati.
Will Klein,

3
@khany, questa è una domanda JavaScript. Le espressioni possono valutare in altre lingue in modo diverso.
Will Klein,

1
@MattW Questo non mostra come usare un IF in linea, ma mostra come usare un IF ELSE
Finlay Percy

1
@getName non proprio, ma potresti usare un'istruzione if di una riga se voleviif (a < b) c = 'major';
MattW

44

Per scrivere ifun'istruzione in linea, il codice al suo interno dovrebbe essere solo un'istruzione:

if ( a < b ) // code to be executed without curly braces;

43

C'è un operatore ternario, come questo:

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

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

7
Non devono nemmeno essere chiamate di funzione ... 0 < 1 : 5 : 120;è un'affermazione perfettamente valida. Un po 'inutile a meno che tu non sia pagato per riga, però.
Ry-

Ok, @ jfriend00, minitech, grazie per i suggerimenti.
Mahmoud Gamal,

@ jfriend00 Vorrei sconsigliarlo in quasi tutti i casi, però. Se non stai usando il valore dell'espressione, quello che vuoi veramente sono gli effetti collaterali; ed effetti collaterali è ciò per cui le dichiarazioni sono ottime. L'utilizzo della semplice e vecchia ifistruzione noiosa in tal caso probabilmente renderà il tuo codice molto più facile da leggere e comprendere, e meno probabilmente si romperà con le modifiche successive.
Emil Lundberg,

35

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

(a && b) || c

Quanto sopra è approssimativamente lo stesso di dire:

a ? b : c

E ovviamente, più o meno lo stesso di:

if ( a ) { b } else { c }

Dico approssimativamente perché c'è una differenza con questo approccio, nel fatto che devi sapere che il valore di bverrà valutato come vero, altrimenti otterrai sempre c. Bascialmente devi capire che la parte che apparirebbe if () { here }ora fa parte della condizione che metti if ( here ) { }.

Quanto sopra è possibile a causa del comportamento di JavaScripts di passare / restituire uno dei valori originali che costituivano l'espressione logica, che dipende dal tipo di operatore. Alcune altre lingue, come PHP, portano avanti il ​​risultato effettivo dell'operazione, ovvero vero o falso, il che significa che il risultato è sempre vero o falso; per esempio:

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 a un'istruzione if normale, è che i primi due metodi possono operare sul lato destro di un argomento, ovvero come parte di un incarico.

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 un'istruzione if standard sarebbe duplicare l'asserzione:

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

Potresti chiederti perché usare solo gli operatori logici invece dell'operatore ternario , per casi semplici che probabilmente non faresti, a meno che non volessi essere sicuro aed bentrambi fossero veri. Puoi anche ottenere condizioni complesse più snelle con gli operatori logici, che possono diventare piuttosto disordinati usando le operazioni ternarie annidate ... poi di nuovo se vuoi che il tuo codice sia facilmente leggibile, né sono davvero così intuitivi.


32

In parole povere, la sintassi spiegava:

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

Può essere scritto come:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;

5
È possibile farlo senza l'istruzione "else"? vale a direcondition ? true
Devil's Advocate,

@ScottBeeson Certo. Dipende anche dall'uso della condizione. true falsee ""dovrebbe andare tutto bene per ignorare la parte else.
Onimusha,

Quindi 2 == 2 ? doSomething()sarebbe lo stesso di if (2 == 2) doSomething()?
Devil's Advocate,

1
Sì, ma l'altra parte non può essere completamente omessa. Al contratto di locazione : falseo : ""dovrebbe essere lì come javascript si aspetta questo.
Onimusha,

5
Oh. Quindi non è possibile farlo senza la dichiarazione else.
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' );

48
Non so nemmeno cosa ho appena letto, ma sto ridendo abbastanza forte.
Jazz

20

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

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

Se hai bisogno anche di un ELSE, usa l'operazione ternaria suggerita dalle altre persone.


17

Puoi fare così in JavaScript:

a < b ? passed() : failed();

8

Cordiali saluti, è possibile comporre operatori condizionali

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

Se la tua logica è sufficientemente complessa, potresti prendere in considerazione l'utilizzo di un IIFE

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

Naturalmente, se prevedi di utilizzare questa logica più di una volta, allora dovresti incapsularla in una funzione per mantenere le cose belle e ASCIUTTE.


6

Ho spesso bisogno di eseguire più codice per condizione, usando: ( , , )più elementi di codice 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 ) );

4

Per aggiungere a questo puoi anche usare inline if condition con && e || operatori. Come questo

var a = 2;
var b = 0;

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

0

La domanda non è essenzialmente: posso scrivere quanto segue?

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

la risposta è sì, si tradurrà sopra.

tuttavia, diffidare di fare quanto segue

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

assicurati di racchiudere il codice ambiguo tra parentesi graffe poiché quanto sopra genererà un'eccezione (e permutazioni simili produrranno un comportamento indesiderato).


0

in linea se:

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

conclusione veritiera: affermazioni eseguite quando l'ipotesi è vera

conclusione di falsa: affermazioni eseguite quando l'ipotesi è falsa

il tuo esempio:

var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.