Como posso usar uma if
instrução embutida em JavaScript? Também existe uma else
declaração em linha ?
Algo assim:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Como posso usar uma if
instrução embutida em JavaScript? Também existe uma else
declaração em linha ?
Algo assim:
var a = 2;
var b = 3;
if(a < b) {
// do something
}
Respostas:
Você não precisa necessariamente do jQuery. Somente o JavaScript fará isso.
var a = 2;
var b = 3;
var c = ((a < b) ? 'minor' : 'major');
A c
variável será minor
se o valor for true
e major
se o valor for false
.
Isso é conhecido como operador condicional (ternário).
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Conditional_Operator
if (a < b) c = 'major';
Para escrever a if
instrução em linha, o código dentro dela deve ser apenas uma instrução:
if ( a < b ) // code to be executed without curly braces;
Existe um operador ternário, assim:
var c = (a < b) ? "a is less than b" : "a is not less than b";
0 < 1 : 5 : 120;
é uma afirmação perfeitamente válida. Um pouco inútil, a menos que você seja pago por linha, no entanto.
if
declaração simples e chata antiga nesse caso provavelmente tornará seu código muito mais fácil de ler e entender, e menos provável de interromper com alterações posteriores.
Você também pode aproximar um if / else usando apenas Operadores Lógicos.
(a && b) || c
O acima é aproximadamente o mesmo que dizer:
a ? b : c
E, claro, aproximadamente o mesmo que:
if ( a ) { b } else { c }
Digo aproximadamente porque há uma diferença nessa abordagem, pois você precisa saber que o valor de b
será avaliado como verdadeiro, caso contrário, você sempre obterá c
. Basicamente, você deve perceber que a parte que apareceria if () { here }
agora faz parte da condição que você coloca if ( here ) { }
.
O exposto acima é possível devido ao comportamento do JavaScripts de transmitir / retornar um dos valores originais que formaram a expressão lógica, que depende do tipo de operador. Certas outras linguagens, como PHP, continuam o resultado real da operação, ou seja, verdadeiro ou falso, o que significa que o resultado é sempre verdadeiro ou falso; por exemplo:
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 {}
Um benefício principal, comparado com uma declaração if normal, é que os dois primeiros métodos podem operar no lado direito de um argumento, ou seja, como parte de uma tarefa.
d = (a && b) || c;
d = a ? b : c;
if `a == true` then `d = b` else `d = c`
A única maneira de conseguir isso com uma instrução if padrão seria duplicar a atribuição:
if ( a ) { d = b } else { d = c }
Você pode perguntar por que usar apenas Operadores Lógicos, em vez do Operador Ternário , para casos simples que provavelmente não usaria, a menos que quisesse ter certeza a
e b
fosse verdade. Você também pode obter condições complexas mais simplificadas com os operadores lógicos, que podem ficar bastante confusos usando operações ternárias aninhadas ... novamente, se você deseja que seu código seja facilmente legível, eles também não são tão intuitivos.
Em inglês simples, a sintaxe explicava:
if(condition){
do_something_if_condition_is_met;
}
else{
do_something_else_if_condition_is_not_met;
}
Pode ser escrito como:
condition ? do_something_if_condition_is_met : do_something_else_if_condition_is_not_met;
condition ? true
true
false
e ""
tudo deve ficar bem em ignorar a parte else.
2 == 2 ? doSomething()
seria o mesmo que if (2 == 2) doSomething()
?
: false
ou : ""
deve estar lá, pois o javascript está esperando isso.
Para sua informação, você pode compor operadores condicionais
var a = (truthy) ? 1 : (falsy) ? 2 : 3;
Se sua lógica for suficientemente complexa, você poderá considerar o uso de um IIFE
var a = (function () {
if (truthy) return 1;
else if (falsy) return 2;
return 3;
})();
Obviamente, se você planeja usar essa lógica mais de uma vez, deve encapsulá-la em uma função para manter as coisas boas e SECAS.
A questão não é essencialmente: posso escrever o seguinte?
if (foo)
console.log(bar)
else
console.log(foo + bar)
a resposta é sim, o acima será traduzido.
no entanto, tenha cuidado ao fazer o seguinte
if (foo)
if (bar)
console.log(foo)
else
console.log(bar)
else
console.log(foobar)
não se esqueça de incluir código ambíguo entre chaves, pois o exemplo acima gera uma exceção (e permutações semelhantes produzirão um comportamento indesejado).
inline se:
(('hypothesis') ? 'truthy conclusion' : 'falsey conclusion')
conclusão verdadeira: declarações executadas quando a hipótese é verdadeira
conclusão de falsey: declarações executadas quando a hipótese é falsa
seu exemplo:
var c = ((a < b) ? 'a<b statements' : '!(a<b) statements');