Как написать встроенный оператор IF в JavaScript?

как я могу использовать встроенную if оператор в JavaScript? Есть ли встроенный else заявление?

что-то вроде этого:

var a = 2;
var b = 3;

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

12 ответов


вам не обязательно нужен jQuery. Только JavaScript сделает это.

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

на c переменная minor, если значение true и major, если значение false.


это называется условным (троичным) оператором.

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


существует тернарный оператор, такой:

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

писать if оператор inline, код внутри него должен быть только одним оператором:

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

на простом английском языке, синтаксис объяснил:

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

можно написать так:

condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;

вы также можете приблизить if / else, используя только логические операторы.

(a && b) || c

это примерно то же самое, что сказать:

a ? b : c

и конечно, примерно так же, как:

if ( a ) { b } else { c }

я говорю ориентировочно, потому что есть одно отличие с этим подходом в том, что вы должны знать, что значение b будет оценивать как true, иначе вы всегда получите c. Bascially вы должны понимать, что часть, которая появится if () { here } is теперь часть условия, которое вы ставите if ( here ) { }.

вышеизложенное возможно из-за поведения JavaScripts передачи / возврата одного из исходных значений, которые сформировали логическое выражение, которое зависит от типа оператора. Некоторые другие языки, такие как PHP, несут фактический результат операции, т. е. true или false, то есть результат всегда true или false; e.g:

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

одно главное преимущество, сравненное с нормальным если заявление, что первые два метода могут работать на правой стороне аргумента, т. е. как часть задания.

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

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

единственный способ достичь этого со стандартным оператором if-дублировать назначение:

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

вы можете спросить, почему использовать только Логические Операторы вместо Тернарный Оператор, для простых случаев вы, вероятно, не будет, если вы не хотите, чтобы убедиться a и b оба были верны. Вы также можете достичь большего обтекаемые сложные условия с логическими операторами, которые могут получить довольно беспорядочный с помощью вложенных троичных операций... опять же, если вы хотите, чтобы ваш код был легко читаемым, на самом деле это не так интуитивно.


<div id="ABLAHALAHOO">8008</div>
<div id="WABOOLAWADO">1110</div>

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

Uhm, если вы имеете в виду в JavaScript, то вы можете сделать так:

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

Если вы просто хотите встроенный IF (без ELSE), вы можете использовать логический оператор AND:

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

Если Вам также нужна еще, используйте тройную операцию, предложенную другими людьми.


FYI, вы можете составить условных операторов

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

Если ваша логика достаточно сложна, то вы можете рассмотреть возможность использования жизнь

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

конечно, если вы планируете использовать эту логику более одного раза, то вы должны инкапсулировать ее в функцию, чтобы держать вещи красивыми и сухими.


мне часто нужно запускать больше кода для каждого условия, используя:( , , ) несколько элементов кода могут выполняться:

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

чтобы добавить к этому, вы также можете использовать встроенное условие if с операторами && и||. Такой

var a = 2;
var b = 0;

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

не является ли вопрос по существу: могу ли я написать следующее?

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

ответ, да, выше будет переводить.

однако, будьте осторожны, делая следующее

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

обязательно оберните неоднозначный код в фигурные скобки, так как выше будет выдано исключение (и подобные перестановки приведут к нежелательному поведению.)