Jak napisać instrukcję inline IF W JavaScript?

Jak mogę używać instrukcji inline if w JavaScript? Czy jest też instrukcja inline else?

Coś takiego:

var a = 2;
var b = 3;

if(a < b) {
    // do something
}
Author: Blowsie, 2012-04-22

12 answers

Niekoniecznie potrzebujesz jQuery. Sam JavaScript to zrobi.

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

Zmienną c będzie minor, jeśli wartością jest true, oraz major, Jeśli wartością jest false.


Jest to znany jako operator warunkowy (trójkowy).

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

 495
Author: MattW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-22 09:59:02

Istnieje operator trójkowy, taki jak:

var c = (a < b) ? "a is less than b"  : "a is not less than b";
 37
Author: Mahmoud Gamal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-22 17:40:50

Do zapisu if instrukcji w linii, kod wewnątrz niej powinien być tylko jednym oświadczeniem:

if ( a < b ) // code to be executed without curly braces;
 34
Author: undefined,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 03:39:52

W prostym języku angielskim, składnia wyjaśniona:

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

Można zapisać jako:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;
 27
Author: Onimusha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-10 08:24:01

Można również przybliżać if / else używając tylko operatorów logicznych.

(a && b) || c

Powyższe jest mniej więcej takie samo jak powiedzenie:

a ? b : c

I oczywiście mniej więcej tak samo jak:

if ( a ) { b } else { c }

Mówię z grubsza, ponieważ istnieje jedna różnica w tym podejściu, w tym, że musisz wiedzieć, że wartość b będzie oceniana jako prawdziwa, w przeciwnym razie zawsze otrzymasz c. Zasadniczo musisz zdać sobie sprawę, że część, która pojawi się if () { here }, jest teraz częścią warunku, który stawiasz if ( here ) { }.

Powyższe jest możliwe ze względu na zachowanie JavaScript polegające na przekazywaniu / zwracaniu jednej z oryginalnych wartości tworzących wyrażenie logiczne, które zależy od typu operatora. Niektóre inne języki, takie jak PHP, kontynuują rzeczywisty wynik operacji, tj. prawda lub FAŁSZ, co oznacza, że wynik jest zawsze prawda lub FAŁSZ; np:

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

Jedną z głównych korzyści, w porównaniu z normalnym twierdzeniem if, jest to, że dwie pierwsze metody mogą działać po prawej stronie argument tj. jako część zadania.

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

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

Jedynym sposobem, aby to osiągnąć za pomocą standardu if, byłoby powielić assigment:

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

Możesz zapytać, dlaczego używasz tylko operatorów logicznych zamiast operatora trójdzielnego , w prostych przypadkach prawdopodobnie nie, chyba że chcesz się upewnić, że a i b są prawdziwe. Można również osiągnąć bardziej usprawnione złożone warunki za pomocą operatorów logicznych, które mogą być dość niechlujne przy użyciu zagnieżdżone operacje trójdzielne... z drugiej strony, jeśli chcesz, aby Twój kod był łatwy do odczytania, nie jesteś tak intuicyjny.

 27
Author: Pebbl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-04 10:02:41
<div id="ABLAHALAHOO">8008</div>
<div id="WABOOLAWADO">1110</div>

parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );
 17
Author: HyderA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-04 08:29:51

Uhm, jeśli masz na myśli JavaScript to możesz zrobić tak:

a < b ? /*do something*/ : /*do something else*/;
 14
Author: Ivar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-22 17:40:29

Jeśli chcesz tylko inline IF (bez ELSE), możesz użyć operatora logicznego i:

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

Jeśli potrzebujesz również ELSE, użyj operacji trójdzielnej, którą zasugerowali inni.

 10
Author: Nahn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-15 20:31:45

Dla twojej wiadomości, możesz tworzyć operatory warunkowe

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

Jeśli twoja logika jest wystarczająco złożona, możesz rozważyć użycie IIFE

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

Oczywiście, jeśli planujesz użyć tej logiki więcej niż raz, to możesz zamknąć ją w funkcji, aby wszystko było miłe i suche.

 4
Author: alan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 20:58:51

Często muszę uruchomić więcej kodu na warunek, używając: ( , , ) wiele elementów kodu może wykonać:

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
Author: kurt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-31 08:15:25

Aby dodać do tego można również użyć warunku inline if z operatorami & & i//. Like this

var a = 2;
var b = 0;

var c = (a > b || b == 0)? "do something" : "do something else";
 3
Author: Anoop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-10 06:37:51

Czy pytanie nie brzmi zasadniczo: czy mogę napisać co następuje?

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

Odpowiedź brzmi: tak, powyższe przełoży się.

Należy jednak uważać na następujące działania]}
if (foo)
  if (bar)
    console.log(foo)
  else 
    console.log(bar)
else 
  console.log(foobar)

Pamiętaj, aby zawinąć niejednoznaczny kod w klamry, ponieważ powyższe spowoduje wyrzucenie wyjątku (a podobne permutacje spowodują niepożądane zachowanie.)

 0
Author: Jay Edwards,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-16 14:48:20