192

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

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

var a = 2; 
var b = 3; 

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

Где JQuery здесь? И я вообще не понимаю вопроса. – Marc

+0

JQuery часть может быть, как это $ (документ) .ready (функция() { вар а = 2; вар б = 3; если (а <Ь) {// делать что-то } }); – takeItEasy

+0

его вопрос с нокаутом тоже –

ответ

434

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

+51

Он иллюстрирует, как использовать Inline IF, который отвечает на вопрос ТОЧНО. – MattW

+17

Просто отметить, что все парнеры в этом случае являются необязательными. Часто используется стиль предпочтения/кодирования, который диктует, когда они используются. –

+0

@WillKlein вы говорите, что все parens необязательны, но когда я делаю это как() ?: вместо (()? :) У меня разные результаты. Я знаю только это, потому что я пробовал это, как на PHP. – khany

13

Эмм, если вы имеете в виду в JavaScript, то вы могли бы сделать так:

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

Мне нравится этот ответ. простой и до точки – shlomia

31

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

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

На самом деле это не должно быть ничем. Элементы правой стороны могут быть просто вызовом функций. – jfriend00

+7

Они даже не должны быть функциональными вызовами ... '0 <1: 5: 120;' является абсолютно корректным утверждением. Однако немного бесполезно, если вы не платите за линию. – Ryan

+0

Хорошо, @ jfriend00, minitech, Спасибо за советы. –

31

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

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

Я даже не знаю, что я только что прочитал, но я очень смеюсь. – Jazz

+0

Это смешно +1 –

23

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

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; 
+2

Можно ли сделать это без инструкции «else»? т.е. 'условие? true' –

3

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

var a = 2; 
var b = 0; 

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

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

(a && b) || c 

выше примерно такой же, как говорят:

a ? b : c 

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

if (a) { b } else { c } 

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

Вышеупомянутое возможно из-за поведения JavaScripts передачи/возврата одного из исходных значений, которые сформировали логическое выражение, которое зависит от типа оператора.Некоторые другие языки, такие как PHP, несут фактический результат операции, то есть 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 {} 

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

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

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

Единственный способ добиться этого стандарта, если заявление будет дублировать распайку:

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

Вы можете спросить, почему использовать только Logical Operators вместо Ternary Operator, для простых случаев вы, вероятно Wouldn 't, если вы не хотите убедиться, что a и b были верны. Вы также можете добиться более упорядоченных сложных условий с помощью логических операторов, которые могут стать довольно беспорядочными с помощью вложенных трехмерных операций ... а затем, если вы хотите, чтобы ваш код был легко читаемым, на самом деле это не интуитивно.

+1

Thumb up для идеи без использования 'if .. else ..'. http://qr.ae/RwmrBb –

9

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

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

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

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) 

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

2

FYI, вы можете составить conditional operators

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

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

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

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

2

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

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)); 
Смежные вопросы