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

288

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

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

var a = 2;
var b = 3;

if(a < b) {
    // do something
}
не принимайте это близко к сердцу
источник
12
Где здесь jQuery? И я все равно не совсем понимаю вопрос.
Марк
Часть jquery может быть такой: $ (document) .ready (function () {var a = 2; var b = 3; if (a <b) {// сделать что-то}});
takeItEasy
это тоже вопрос нокаутом
Мартин Каподичи
1
Это также угловой 1 и 2 и все остальные js framework (включая vanilla.js), там есть вопрос
Бен Талиадорос

Ответы:

644

Вам не обязательно нужен 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

MattW
источник
59
Это иллюстрирует, как использовать Встроенный IF, который отвечает на вопрос ТОЧНО.
MattW
26
Отметим, что в этом случае все парны не обязательны. Часто именно личные предпочтения / стиль кодирования определяют, когда они используются.
Уилл Кляйн
3
@khany, это вопрос JavaScript. Выражения могут оцениваться на других языках по-разному.
Уилл Кляйн
1
@MattW Это не показывает, как использовать встроенный IF, это показывает, как использовать IF ELSE
Finlay Percy
1
@getName не совсем, но вы можете использовать одну строку if, если хотитеif (a < b) c = 'major';
MattW
44

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

if ( a < b ) // code to be executed without curly braces;
не определено
источник
43

Существует троичный оператор, например:

var c = (a < b) ? "a is less than b"  : "a is not less than b";
Махмуд Гамаль
источник
4
Это на самом деле не должно быть назначено ни на что. Правые элементы могут быть просто вызовами функций.
jfriend00
7
Они даже не должны быть вызовами функций ... 0 < 1 : 5 : 120;это совершенно правильное утверждение. Немного бесполезно, если вам не платят за линию, хотя.
Ry-
Хорошо, @ jfriend00, Minitech, Спасибо за советы.
Махмуд Гамаль
@ jfriend00 Я бы посоветовал против этого почти во всех случаях. Если вы не используете значение выражения, то вам действительно нужны побочные эффекты; и побочные эффекты - то , для чего большие заявления . Использование простого старого скучного ifоператора в таком случае, вероятно, сделает ваш код намного легче для чтения и понимания и с меньшей вероятностью сломается с последующими изменениями.
Эмиль Лундберг
35

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

(a && b) || c

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

a ? b : c

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

if ( a ) { b } else { c }

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

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

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

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

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оба были верны. Вы также можете достигнуть более обтекаемых сложных условий с помощью логических операторов, которые могут стать довольно запутанными, используя вложенные троичные операции ... и опять же, если вы хотите, чтобы ваш код был легко читаемым, ни один из них не является настолько интуитивным.

Pebbl
источник
32

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

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;
Onimusha
источник
5
Возможно ли сделать это без утверждения «else»? т.е.condition ? true
адвокат дьявола
@ ScottBeeson Конечно. Это также зависит от вашего использования условия. true falseи ""все должно быть хорошо, чтобы игнорировать остальную часть.
Онимуша,
Так 2 == 2 ? doSomething()было бы так же, как if (2 == 2) doSomething()?
адвокат дьявола
1
Да, но остальная часть не может быть полностью опущена. В аренде : falseили : ""должен быть там, как и ожидал javascript.
Онимуша
5
Ой. Так что это не возможно сделать это без еще заявления.
адвокат дьявола
21
<div id="ABLAHALAHOO">8008</div>
<div id="WABOOLAWADO">1110</div>

parseInt( $( '#ABLAHALAHOO' ).text()) > parseInt( $( '#WABOOLAWADO ).text()) ? alert( 'Eat potato' ) : alert( 'You starve' );
HyderA
источник
48
Я даже не знаю, что я только что прочитал, но я смеюсь довольно сильно.
Джаз
20

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

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

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

Nahn
источник
17

Вы можете сделать это в JavaScript:

a < b ? passed() : failed();
Ивар
источник
8

К вашему сведению, вы можете составить условные операторы

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

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

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

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

Алан
источник
6

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

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

Чтобы добавить к этому, вы также можете использовать inline, если условие с && и || операторы. Как это

var a = 2;
var b = 0;

var c = (a > b || b == 0)? "do something" : "do something else";
Anoop
источник
0

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

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)

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

Джей Эдвардс
источник
0

встроенный, если:

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

правдивый вывод: заявления, выполненные, когда гипотеза верна

вывод фальси: заявления, выполненные, когда гипотеза неверна

ваш пример:

var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
Сэмми
источник