javascript - with - w3 title attribute




Como escrever uma instrução IF inline em JavaScript? (8)

Como posso usar uma instrução if inline em JavaScript? Existe uma declaração inline else também?

Algo assim:

var a = 2;
var b = 3;

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

Em inglês claro, a sintaxe explicou:

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;

Existe um operador ternário, assim:

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

Muitas vezes preciso executar mais código por condição, usando: ( , , ) vários elementos de código podem ser executados:

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 ) );

Não é a questã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)

Certifique-se de quebrar o código ambíguo entre chaves, pois o acima irá lançar uma exceção (e permutações semelhantes produzirão um comportamento indesejado).


Para escrever if statement inline, o código dentro dele deve ser apenas uma instrução:

if ( a < b ) // code to be executed without curly braces;

Se você quer apenas um IF inline (sem o ELSE), você pode usar o operador lógico AND:

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

Se você precisar de um ELSE também, use a operação ternária que as outras pessoas sugeriram.


Você poderia fazer assim em JavaScript:

a < b ? passed() : failed();

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 }

Eu digo mais ou menos, porque há uma diferença com essa abordagem, em que você tem que saber que o valor de b será avaliado como verdadeiro, caso contrário, você sempre obterá c . Bascially você tem que perceber que a parte que apareceria if () { here } agora faz parte da condição que você coloca if ( here ) { } .

O acima é possível devido ao comportamento JavaScripts de passar / retornar um dos valores originais que formaram a expressão lógica, qual depende do tipo de operador. Certas outras linguagens, como PHP, executam o resultado real da operação, isto é, verdadeiro ou falso, significando 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 atribuição.

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 você provavelmente não faria, a menos que você quisesse ter certeza de que a e b eram ambos verdadeiros. 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 ... então, novamente, se você quiser que seu código seja facilmente legível, também não é realmente tão intuitivo.







conditional-operator