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

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

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

var a = 2;
var b = 3;

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

person takeItEasy    schedule 22.04.2012    source источник
comment
Где здесь jQuery? И я все равно не понимаю вопроса.   -  person Marc    schedule 22.04.2012
comment
Часть jquery может выглядеть так: $ (document) .ready (function () {var a = 2; var b = 3; if (a ‹b) {// делаем что-то}});   -  person takeItEasy    schedule 22.04.2012
comment
это тоже нокаутный вопрос   -  person Martin Capodici    schedule 18.07.2014
comment
Это также angular 1 и 2 и любая другая структура js (включая vanilla.js) там вопрос   -  person Ben Taliadoros    schedule 19.10.2016


Ответы (14)


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

person MattW    schedule 22.04.2012
comment
Он показывает, как использовать встроенный IF, который ТОЧНО отвечает на вопрос. - person MattW; 22.04.2012
comment
Обратите внимание: все скобки в этом случае необязательны. Часто их использование определяется личными предпочтениями / стилем кодирования. - person Will Klein; 22.04.2012
comment
@WillKlein, вы говорите, что все скобки необязательны, когда я делаю это как () ?: вместо (()? :) Я получаю разные результаты. Я знаю это только потому, что пробовал, как в PHP. - person khany; 05.12.2014
comment
@khany, это вопрос JavaScript. Выражения на других языках могут оцениваться по-разному. - person Will Klein; 14.01.2015
comment
@MattW Здесь не показано, как использовать встроенный IF, он показывает, как использовать IF ELSE - person Finlay Percy; 22.01.2018
comment
@MattW есть ли способ использовать тернар, если без else? - person getName; 06.11.2018
comment
@getName не совсем, но вы могли бы использовать однострочный оператор if, если хотите if (a < b) c = 'major'; - person MattW; 07.11.2018

Есть тернарный оператор, например:

var c = (a < b) ? "a is less than b"  : "a is not less than b";
person Mahmoud Gamal    schedule 22.04.2012
comment
На самом деле это не нужно ни к чему приписывать. Элементы правой стороны могут быть просто вызовами функций. - person jfriend00; 22.04.2012
comment
Они даже не обязательно должны быть вызовами функций ... 0 < 1 : 5 : 120; - совершенно верное утверждение. Хотя это немного бесполезно, если вам не платят за линию. - person Ry-♦; 22.04.2012
comment
Хорошо, @ jfriend00, minitech, спасибо за советы. - person Mahmoud Gamal; 22.04.2012
comment
@ jfriend00 Я бы посоветовал не использовать его почти во всех случаях. Если вы не используете значение выражения, то на самом деле вам нужны побочные эффекты; и побочные эффекты - вот для чего отлично подходят операторы. Использование в таком случае простого старого скучного оператора if, вероятно, сделает ваш код намного более легким для чтения и понимания и с меньшей вероятностью сломается при последующих изменениях. - person Emil Lundberg; 10.12.2015

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

if ( a < b ) // code to be executed without curly braces;
person undefined    schedule 22.04.2012

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

(a && b) || c

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

a ? b : c

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

if ( a ) { b } else { c }

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

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

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 }

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

person Pebbl    schedule 04.11.2013

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

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;
person Onimusha    schedule 10.05.2013
comment
Можно ли сделать это без оператора else? т.е. condition ? true - person JOATMON; 15.05.2017
comment
@ScottBeeson Конечно. Это также зависит от того, как вы используете условие. true false и "" должны быть в порядке, чтобы игнорировать часть else. - person Onimusha; 16.05.2018
comment
Итак, 2 == 2 ? doSomething() будет таким же, как if (2 == 2) doSomething()? - person JOATMON; 16.05.2018
comment
Да, но часть else нельзя полностью исключить. По крайней мере, : false или : "" должны быть там, поскольку javascript ожидает этого. - person Onimusha; 17.05.2018
comment
Ой. Так что это невозможно сделать без оператора else. - person JOATMON; 17.05.2018

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

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

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

person Nahn    schedule 14.07.2015

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

a < b ? passed() : failed();
person Ivar    schedule 22.04.2012

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

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

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

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

Конечно, если вы планируете использовать эту логику более одного раза, тогда вы должны инкапсулировать ее в функцию, чтобы все было красиво и СУХОЕ.

person alan    schedule 01.08.2016

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

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 ) );
person kurt    schedule 31.08.2017

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

var a = 2;
var b = 0;

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

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

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

Правдивый вывод: утверждения выполняются, когда гипотеза верна

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

ваш пример:

var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');
person Sammy    schedule 04.06.2020

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

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)

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

person Jay Edwards    schedule 16.07.2015

Упростить тернарный оператор

var locked = 1;
var canChange = locked != 1 ? true : false;

Если заблокировано 1, тогда для переменной canChange устанавливается значение false, в противном случае устанавливается значение true. В этом случае вы можете упростить его, используя логическое выражение следующим образом:

var locked = 1;
var canChange = locked != 1;

Для нескольких тернарных операторов JavaScript В следующем примере показано, как использовать два тернарных оператора в одном выражении:

var speed = 90;
var message = speed >= 120 ? 'Too Fast' : (speed >= 80 ? 'Fast' : 'OK');
console.log(message);

Лучше всего использовать тернарный оператор, когда он упрощает чтение кода. Если логика содержит много операторов if ... else, вам не следует использовать тернарные операторы.

person Deepak    schedule 21.05.2021

person    schedule
comment
Я даже не знаю, что только что прочитал, но я довольно сильно смеюсь. - person Jazz; 02.02.2013