Как я могу использовать встроенный if
оператор в JavaScript? Есть ли встроенное else
утверждение тоже?
Что-то вроде этого:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Как я могу использовать встроенный if
оператор в JavaScript? Есть ли встроенное else
утверждение тоже?
Что-то вроде этого:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Ответы:
Вам не обязательно нужен 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
if (a < b) c = 'major';
Для написания if
встроенного оператора, код внутри него должен быть только одним оператором:
if ( a < b ) // code to be executed without curly braces;
Существует троичный оператор, например:
var c = (a < b) ? "a is less than b" : "a is not less than b";
0 < 1 : 5 : 120;
это совершенно правильное утверждение. Немного бесполезно, если вам не платят за линию, хотя.
if
оператора в таком случае, вероятно, сделает ваш код намного легче для чтения и понимания и с меньшей вероятностью сломается с последующими изменениями.
Вы также можете аппроксимировать 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
оба были верны. Вы также можете достигнуть более обтекаемых сложных условий с помощью логических операторов, которые могут стать довольно запутанными, используя вложенные троичные операции ... и опять же, если вы хотите, чтобы ваш код был легко читаемым, ни один из них не является настолько интуитивным.
На простом английском языке синтаксис объясняется так:
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;
condition ? true
true
false
и ""
все должно быть хорошо, чтобы игнорировать остальную часть.
2 == 2 ? doSomething()
было бы так же, как if (2 == 2) doSomething()
?
: false
или : ""
должен быть там, как и ожидал javascript.
К вашему сведению, вы можете составить условные операторы
var a = (truthy) ? 1 : (falsy) ? 2 : 3;
Если ваша логика достаточно сложна, то вы можете рассмотреть возможность использования IIFE
var a = (function () {
if (truthy) return 1;
else if (falsy) return 2;
return 3;
})();
Конечно, если вы планируете использовать эту логику более одного раза, то вам следует включить ее в функцию, чтобы все было красиво и сухо.
Не вопрос ли по существу: могу ли я написать следующее?
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)
Обязательно заключите в фигурные скобки неоднозначный код, так как вышеприведенное вызовет исключение (и аналогичные перестановки приведут к нежелательному поведению.)